IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Нарисовать калейдоскоп, Проблемы с кодингом
Relrin
сообщение 17.03.2011 22:39
Сообщение #1


Пионер
**

Группа: Пользователи
Сообщений: 64
Пол: Мужской

Репутация: -  0  +


Сейчас стараюсь решить задачку в графике, однако возникло масса проблем с кодингом.
Условие следующее:
Прикрепленное изображение Прикрепленное изображение

Я представил эту ситуацию так:
Прикрепленное изображение
Каждая сторона имеет свой номер(чтобы было проще соориентироваться, при отрисовке линий).
Проблемы которые возникли:
1) Отрисовка этих линий в одном треугольнике (начинаем с треугольника FOA)
2) "Отзеркаливание" этих линий, вместо того, чтобы рисовать их с нуля. (в нашем примере, нарисовав линии в треугольнике FOA, рисуем зеркально линии в OAB, относительно OA; после этого, опять зеркально рисуем для треугольника BOC, относительно BO).

Для отрисовки линий, пока трудно представляю как выбрать некоторые "случайные" координаты для первой точки линии на одной стороне, а после, взять другие "случайные" на одной из двух других. Пока что пришло на ум, через case как-то выделять эти стороны, обращение к ним, если одна из них выбрана.
С отзеркаливанием линий, это по-мойму самая сложная часть, поскольку возникают вопросы:
а) как указать программе, какую взяли линии за "ось симметрии"
б) рисовать относительно нее линии

Исходный код, того, чего я смог пока сделать (Показать/Скрыть)


Сообщение отредактировано: Lapp - 18.03.2011 0:26
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
volvo
сообщение 18.03.2011 17:20
Сообщение #2


Гость






Цитата
после чего нужно будет только изменить их координаты, путем поворота на 60 градусов по часовой/против часовой стрелки.
То есть, ты пришел к тому же, о чем я написал тебе во втором посте, но делаешь это пока сложным методом... Ничего, через пару дней тебе в голову придет идея, что можно не хранить координаты X, Y для начала/конца отрезка, а сделать что-то вроде:

type
Position_Type =
(Radial_Edge_Left, Radial_Edge_Right, Non_Radial_Edge);
Polar_Point =
record
Position : Position_Type;
Phi, R : Integer;
end;

procedure Generate_Point(var Pnt : Polar_Point);
begin
Pnt.Position := Position_Type (Random (Ord (Non_Radial_Edge)));
case Pnt.Position of
Radial_Edge_Left : // Сгенерировать точку на "левой" радиальной стороне треугольника
begin
Pnt.Phi := 0;
// Я принял отсчет угла от "левой" стороны, которая проходится
// первой при обходе по часовой стрелке...
Pnt.R := Random (Radius);
end;

Radial_Edge_Right : // Сгенерировать точку на "правой" радиальной стороне
begin
Pnt.Phi := Angle; // 360 / количество сторон многоугольника
Pnt.R := Random (Radius);
end;

Non_Radial_Edge : // Сгенерировать точку на НЕрадиальной стороне
begin
Pnt.Phi := Random (Angle);
Pnt.R := Trunc (Radius * Cos (To_Radians (Pnt.Phi)));
end;
end;
end;

Тут же можно генерировать и вторую точку отрезка, только надо следить, чтобы их поля Position не были равны, иначе линия отрезок сольется с одной из сторон треугольника... Видишь, насколько все проще? Если подумать - то не надо будет даже ничего добавлять ни к чему для отзеркаливания: допустим, ты пронумеровал все треугольники от 1 до N, и сгенерировал несколько отрезков для треугольника №1. Тогда во все нечетные можно просто отображать те же отрезки, а в четные - поменяв Position с REL на RER, а для NRE - изменив угол с Phi на Angle - Phi... И всё, можно сразу всё отрисовать, буквально за 1 проход...
 К началу страницы 
+ Ответить 

Сообщений в этой теме
Relrin   Нарисовать калейдоскоп   17.03.2011 22:39
volvo   Ты пошел сложным путем. Я бы сделал по-другому... ...   17.03.2011 23:12
Relrin   1. Я не работал бы в декартовой системе координат...   17.03.2011 23:46
volvo   Я не думаю, что это будет сложнее, чем в декартовы...   18.03.2011 15:42
Relrin   Относительно отзеркаливания, пришла в голову идея,...   18.03.2011 15:51
volvo   То есть, ты пришел к тому же, о чем я написал тебе...   18.03.2011 17:20
Relrin   Тогда как будет выглядеть в целом программа, если ...   18.03.2011 18:52
volvo   Чуть позже, хорошо? Часа через 3-4 я освобожусь и ...   18.03.2011 19:39
Relrin   Чуть позже, хорошо? Часа через 3-4 я освобожусь и...   18.03.2011 19:46
Lapp   Ок. Мне к спеху :) К спеху или НЕ к спеху? )) Хм...   18.03.2011 21:45
Relrin   К спеху или НЕ к спеху? )) Хм. Полярные координ...   19.03.2011 19:51
Relrin   volvo, можешь скинуть код решения задачи в ПСК?   28.03.2011 23:01
Relrin   Возник вопрос, относительно старой темы - калейдос...   4.05.2011 16:04
Lapp   Возник вопрос, относительно старой темы - калейдос...   5.05.2011 6:47
IUnknown   У меня тоже возник вопрос: основная твоя задача - ...   5.05.2011 9:22


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 5.06.2024 9:09
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"