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 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
Relrin
сообщение 18.03.2011 15:51
Сообщение #2


Пионер
**

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

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


Относительно отзеркаливания, пришла в голову идея, что, после того, как в одном треугольнике нарисуем все нужные линии, запишем в массивы их координаты (начало и конец соответственно), после чего нужно будет только изменить их координаты, путем поворота на 60 градусов по часовой/против часовой стрелки. Еще, не знаю, возможно, что через линейное преобразование можно сделать, но не уверен в результате...

Правда, пока не очень удачно получается взять координаты начала и конца точек, чтобы нарисовать все эти линии...

Исходный код:

{Поиск начальной координаты линии}
Procedure FindXYStart;
Var
buf: integer;
Begin
side:=random(3)+1;
case side of
1: begin
buf:=top[1].X-center.X;
x1:=top[1].X-random(buf)+1;
buf:=center.Y-top[1].Y;
y1:=center.Y-random(buf)+1;
end;
2: begin
buf:=abs(top[1].X-top[2].X);
x1:=top[1].X-random(buf)+1;
buf:=abs(top[1].Y);
y1:=buf;
end;
3: begin
buf:=center.X-top[2].X;
x1:=center.X-random(buf)+1;
buf:=center.Y-top[2].Y;
y1:=center.Y-random(buf)+1;
end;
end;
End;

{Поиск конечной координаты линии}
Procedure FindXYEnd;
Var
asd: word;
buf: integer;
Begin
case side of
1: begin
repeat
asd:=random(3)+1;
until asd<>side;
case asd of
2: begin
buf:=abs(top[1].X-top[2].X);
x2:=top[1].X-random(buf)+1;
buf:=abs(top[1].Y);
y2:=buf;
end;
3: begin
buf:=abs(center.X-top[2].X);
x2:=center.X-random(buf)+1;
buf:=abs(center.Y-top[2].Y);
y2:=center.Y-random(buf)+1;
end;
end;
end;

2: begin
repeat
asd:=random(3)+1;
until asd<>side;
case asd of
1: begin
buf:=abs(top[1].X-center.X);
x2:=top[1].X-random(buf)+1;
buf:=abs(center.Y-top[1].Y);
y2:=center.Y-random(buf)+1;
end;
3: begin
buf:=abs(center.X-top[2].X);
x2:=center.X-random(buf)+1;
buf:=abs(center.Y-top[2].Y);
y2:=center.Y-random(buf)+1;
end;
end;
end;

3: begin
repeat
asd:=random(3)+1;
until asd<>side;
case asd of
1: begin
buf:=abs(top[1].X-center.X);
x2:=top[1].X-random(buf)+1;
buf:=abs(center.Y-top[1].Y);
y2:=center.Y-random(buf)+1;
end;
2: begin
buf:=abs(top[1].X-top[2].X);
x2:=top[1].X-random(buf)+1;
buf:=abs(top[1].Y);
y2:=buf;
end;
end;
end;
end;
End;



Сообщение отредактировано: Relrin - 18.03.2011 16:02
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме
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

 



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