Задали написать программу, которая бы читала из файла точки и выводила их в самом удобном масштабе. То есть если точки лежат только в первой и четвертой четвертях, то рисовать только ту часть графика, в которой находятся точки (1 и 4 четверти). Есть ли какой -нибудь более простой алгоритм, чем рассмотрение случаев расположения точек в лоб?
Помогите,пожалуйста! Заранее огромное спасибо!
Рисование точек в наилучшем масштабе
Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain
- Romeo
- Сообщения: 3126
- Зарегистрирован: 02 мар 2004, 17:25
- Откуда: Крым, Севастополь
- Контактная информация:
Заводим матрицу 3 на 3. Каждый элемент хранит количество точек в определённой области декартовой плоскости.
Т.е. угловые элементы матрицы отвечают за координатные четверти, элемент (1,1) - за начало координат, а все остальные элменты матрицы - за координатные полуоси.
Теперь пробегаем по всем данным точкам и анализируем их координаты (>0, <0 или =0) и инкрементрируем соответствующий элемент матрицы.
После окончания цикла достаточно проанализировать элементы матрицы. Если мы имеем все нули в любой крайней строке или в любом крайнем столбце (крайний - это первый или последний), то соответствующую полуплоскость можно не рисовать.
Код: Выделить всё
|
|
(0,0) (0,1) (0,2)
|
--(1,0)---------(1,1)------------(1,2)--
|
(2,0) (2,1) (2,2)
|
|
Теперь пробегаем по всем данным точкам и анализируем их координаты (>0, <0 или =0) и инкрементрируем соответствующий элемент матрицы.
После окончания цикла достаточно проанализировать элементы матрицы. Если мы имеем все нули в любой крайней строке или в любом крайнем столбце (крайний - это первый или последний), то соответствующую полуплоскость можно не рисовать.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
У тебя кода случайно не найдется? Мне алгоритм как-то не очень понятен.
- Romeo
- Сообщения: 3126
- Зарегистрирован: 02 мар 2004, 17:25
- Откуда: Крым, Севастополь
- Контактная информация:
Конечно же готового кода у меня нет, а реализовывать алгоритм, к сожалению, нет времени. Лучше спроси, что именно не понятно в алгоритме. Отвечу с удовольствием. Старался описывать алгоритм предельно ясно, честное слово, специально не использовал никаких computer science терминов - лишь элементарные термины школьной геометрии и алгебры первого курса иниверситета.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Можно еще считать угл... ИМХО не сложноBUFFER90 писал(а):То есть если точки лежат только в первой и четвертой четвертях, то рисовать только ту часть графика, в которой находятся точки (1 и 4 четверти). Есть ли какой -нибудь более простой алгоритм, чем рассмотрение случаев расположения точек в лоб?
Усложнять - легко, упрощать - сложно
Спасибо большое. Все это навело меня на очень даже неплохие мысли. Очень даже неплохо вышло.