Рисование точек в наилучшем масштабе

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

Ответить
BUFFER90
Сообщения: 7
Зарегистрирован: 26 мар 2005, 18:19
Контактная информация:

Задали написать программу, которая бы читала из файла точки и выводила их в самом удобном масштабе. То есть если точки лежат только в первой и четвертой четвертях, то рисовать только ту часть графика, в которой находятся точки (1 и 4 четверти). Есть ли какой -нибудь более простой алгоритм, чем рассмотрение случаев расположения точек в лоб?
Помогите,пожалуйста! Заранее огромное спасибо!
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

Заводим матрицу 3 на 3. Каждый элемент хранит количество точек в определённой области декартовой плоскости.

Код: Выделить всё

                  |
                  |
  (0,0)         (0,1)            (0,2) 
                  |
--(1,0)---------(1,1)------------(1,2)--
                  |
  (2,0)         (2,1)            (2,2)
                  |
                  |
Т.е. угловые элементы матрицы отвечают за координатные четверти, элемент (1,1) - за начало координат, а все остальные элменты матрицы - за координатные полуоси.

Теперь пробегаем по всем данным точкам и анализируем их координаты (>0, <0 или =0) и инкрементрируем соответствующий элемент матрицы.

После окончания цикла достаточно проанализировать элементы матрицы. Если мы имеем все нули в любой крайней строке или в любом крайнем столбце (крайний - это первый или последний), то соответствующую полуплоскость можно не рисовать.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
BUFFER90
Сообщения: 7
Зарегистрирован: 26 мар 2005, 18:19
Контактная информация:

У тебя кода случайно не найдется? Мне алгоритм как-то не очень понятен.
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

Конечно же готового кода у меня нет, а реализовывать алгоритм, к сожалению, нет времени. Лучше спроси, что именно не понятно в алгоритме. Отвечу с удовольствием. Старался описывать алгоритм предельно ясно, честное слово, специально не использовал никаких computer science терминов - лишь элементарные термины школьной геометрии и алгебры первого курса иниверситета.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Hup
Сообщения: 207
Зарегистрирован: 05 мар 2004, 05:31
Откуда: Владивосток
Контактная информация:

BUFFER90 писал(а):То есть если точки лежат только в первой и четвертой четвертях, то рисовать только ту часть графика, в которой находятся точки (1 и 4 четверти). Есть ли какой -нибудь более простой алгоритм, чем рассмотрение случаев расположения точек в лоб?
Можно еще считать угл... ИМХО не сложно
Усложнять - легко, упрощать - сложно
BUFFER90
Сообщения: 7
Зарегистрирован: 26 мар 2005, 18:19
Контактная информация:

Спасибо большое. Все это навело меня на очень даже неплохие мысли. Очень даже неплохо вышло.
Ответить