Форум программистов, компьютерный форум CyberForum.ru

Определить кольцо с центром в начале координат, которое содержит все точки. - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.89
Nina_L
3 / 3 / 0
Регистрация: 08.06.2010
Сообщений: 60
12.05.2011, 21:06     Определить кольцо с центром в начале координат, которое содержит все точки. #1
В одномерном массиве с четным количеством элементов (2N) находятся координаты N точек плоскости. Они располагаются в следующем порядке: x1, y1, х2, y2, x3, y3, и т.д. Определить кольцо с центром в начале координат, которое содержит все точки.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.05.2011, 21:06     Определить кольцо с центром в начале координат, которое содержит все точки.
Посмотрите здесь:

C++ Посчитать к-во точек, попавших в круг с радиусом R и с центром в начале координат
C++ Определить номер точки, через которую проходит окружность с центром в начале координат, внутрь которой попадают все оставшиеся точки.
Определить, сколько точек с целочисленными координатами попадают в круг заданного радиуса с центром в начале координат C++
Определить кольцо с центром в начале координат, которое содержит все точки C++
Определить минимальный радиус окружности с центром в начале координат...(массив) C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
skaa
Хочу в Исландию
 Аватар для skaa
1024 / 823 / 75
Регистрация: 10.11.2010
Сообщений: 1,626
12.05.2011, 21:18     Определить кольцо с центром в начале координат, которое содержит все точки. #2
Надо найти максимум sqrt(x[n]²+y[n]²) и минимум этой же величины. Кольцо будет иметь формулу:
Min² <= x² + y² <= Max²
.
Nina_L
3 / 3 / 0
Регистрация: 08.06.2010
Сообщений: 60
12.05.2011, 21:21  [ТС]     Определить кольцо с центром в начале координат, которое содержит все точки. #3
А можна чуть поподробнее?)))
skaa
Хочу в Исландию
 Аватар для skaa
1024 / 823 / 75
Регистрация: 10.11.2010
Сообщений: 1,626
12.05.2011, 22:58     Определить кольцо с центром в начале координат, которое содержит все точки. #4
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include    <math.h>
#define N   5
void    main()
{
  double    p2xy[2*N]={1.,2.,3.,4.,5.,6.,7.,8.,9.,10.};
  double    xp,yp;
  double    dist;
  int   jp;
  double    MinD,MaxD;
 
  xp=p2xy[0];
  yp=p2xy[1];
  MinD=sqrt(xp*xp+yp*yp);MaxD=MinD;
  for(jp=1;jp<N;jp++)
  {
    xp=p2xy[jp*2];
    yp=p2xy[jp*2+1];
    dist=sqrt(xp*xp+yp*yp);
    if(dist<MinD)
      MinD=dist;
    if(dist>MaxD)
      MaxD=dist;
  }
}
//This is the formula: MinD² <= x² + y² <= MaxD²
Nina_L
3 / 3 / 0
Регистрация: 08.06.2010
Сообщений: 60
12.05.2011, 23:10  [ТС]     Определить кольцо с центром в начале координат, которое содержит все точки. #5
Спасибочки, огромное)))
oleg@tor1
 Аватар для oleg@tor1
32 / 17 / 2
Регистрация: 05.09.2011
Сообщений: 152
10.03.2013, 04:21     Определить кольцо с центром в начале координат, которое содержит все точки. #6
Вот такой вариант. С "графикой".

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
#include <Windows.h>// Необходим для отрисовки. Фукционально включает аналоги graphics.h - C++ Builder.
#include <math.h>
#include <iostream>
#include <stdlib.h>
#include <time.h>
#include <array>
#define WIDTH  80   // Используем макрос для замены показателей на цифровые зн-я.
#define HEIGHT 22
using namespace std;
 
int main()
{
    setlocale(LC_ALL,"Russian");
    double t;
    double r;
    int c=190;  
    const int size = 5; // Константа для размера массива.   
    double    x, y;// Координатные переменные.      
    double    dist;// Буфер для временного значения МАКС и МИН.
    int       jp;  // Переменная для цикла и вычисления Х и У.
    double    MinD, MaxD;// Максимум и минимум для окружности.
 
    srand(static_cast <double>(time(NULL)));  // Генерируем псевдо-случайные числа.
 
    double    XY [2*size]={rand()%70+1.,rand()%65+1.,rand()%80+1.,rand()%77+1.,rand()%20+1.,rand()%40+1.}; // Заполняем массив случайными координатами точек.
 
    x = XY[0];      // Указываем градацию эл-тов массива: х,у, х,у... .
    y = XY[1];
 
    MinD = sqrt (x*x + y*y);// Находим минимум.
    MaxD=MinD;          // Т.к. нам достаточно одного максимума для отрисовки круга, зная центр.
 
    for (jp = 1; jp < size; jp++)   // Находим необходимый максимум.
    {
        x = XY [jp*2];
        y = XY [jp*2+1];
 
        dist = sqrt (x*x + y*y);
 
        if(dist < MinD)
        {MinD = dist;}
        if(dist > MaxD)
        {MaxD = dist;}
    }
 
    cout << endl << endl << endl << endl << "Координаты точек:" << endl;
 
    for (unsigned int z = 0; z < size; ++z)
    {
        cout << XY[z] << ':' << XY[z+1] << ' '; 
    }
 
    // Добавим красок! ;)
    HANDLE hSTDOut = GetStdHandle(STD_OUTPUT_HANDLE); // HANDLE - дискриптор. Т.е. номер потока для буфера консоли в системе.
    CONSOLE_SCREEN_BUFFER_INFO SCRN_INFO;             // Объявляем экземплр структуры CONSOLE_SCREEN_BUFFER_INFO. Содержит информацию о буфере экрана консоли
    SetConsoleTextAttribute(hSTDOut,FOREGROUND_GREEN | FOREGROUND_GREEN | FOREGROUND_GREEN|FOREGROUND_INTENSITY); // Играем с цветом RGB. Делаем зелёный текст.
 
 
    cout << endl << "Кольцо, построенное на плоскости и включающее все точки массива."<<' ';
    cout << "Радиус:" << MaxD << endl;
    r = MaxD; // Радиус инициализируем найденным максимумом.
 
    HDC hDC = GetDC( GetConsoleWindow( ) ); // Извлекает дескриптор дисплейного контекста устройства (DC) для рабочей области заданного окна
    HPEN Pen = CreatePen( PS_SOLID, 2, RGB(255, 255, 255)); // Создаём "Ручку". Инструмент для рисования.
 
    SelectObject( hDC, Pen );       // Функция  SelectObject выбирает объект в заданный контекст устройства (DC).
    MoveToEx( hDC, 10, c, NULL );   // Двигаемся на позицию.
    LineTo( hDC, c + 300, c );      // Чертим линию. Ось Ох.
    MoveToEx( hDC, c, 90, NULL );
    LineTo( hDC, c, c + 300 );
 
    for ( t = -r; t <= r; t += 1) // Цифра задаёт шаг в прорисовке окружности. Можно эксперементировать. Float задаётся через "."!!!
    {
        MoveToEx( hDC, r*sin(t)+c, r*cos(t)+c, NULL ); // Двигаемся на позицию NULL (0).
        LineTo  ( hDC, r*sin(t)+c, r*cos(t)+c );       // Чертим круг.
    }
 
    HANDLE hCon;
    COORD cPos; // Экземпляр. Структура COORD определяет координаты символьной клетки в консоли.
    hCon = GetStdHandle(STD_OUTPUT_HANDLE); // Функция GetStdHandle извлекает дескриптор для стандартного ввода данных, стандартного вывода или стандартной ошибки устройства.
    cPos.Y = c/13; // Определяем позицию немного левее от центраю
    cPos.X = c/9;
 
    SetConsoleCursorPosition(hCon, cPos); // Устанавливаем курсор.
    cout << "0" <<"\n\n\n\n\n\n\n\n\n\n\n\n\n\n"; 
    system("pause");    
 
} // end_main
Yandex
Объявления
10.03.2013, 04:21     Определить кольцо с центром в начале координат, которое содержит все точки.
Ответ Создать тему
Опции темы

Текущее время: 23:50. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru