Помощь - Поиск - Пользователи - Календарь
Полная версия: Поворот призмы
Форум «Всё о Паскале» > Современный Паскаль и другие языки > Делфи
Кошка
Нужно написать такую программу в Делфи:
"Дана призма, например, четырёхугольная. С клавиатуры вводится число, на которое её верхнее основание должно повернуться в своей плоскости. При этом нижнее основание остаётся на месте, а боковые рёбра превращаются в спирали".
Как сделать, чтобы отрезки изгибались в соответствии с заданным числом? И как получить поворот параллелограмма?
volvo
Цитата
И как получить поворот параллелограмма?
Это как раз - самое простое: поворот точек (по отдельности), образующих этот параллелограмм, на заданный угол вокруг оси вращения, а потом - соединить точки линиями... Сложнее будет с преобразованием прямых в спирали ... Почему спираль?

Попробуй нарисовать (вручную), какую именно линию ты хочешь получить при повороте верхнего основания...
Lapp
Цитата(volvo @ 12.06.2007 0:49) *

Почему спираль?
Я попробую ответить на этот вопрос, как я это понимаю.
Видимо, нужно изобразить кривые, которые описали бы вершины, скажем, верхнего основания, если верхнее основание опускать вниз, при этом постепенно поворачивая, так, что достигнув уровня нижнего основания, оно совпадет с повернутым на заданный угол нижним основанием. Уфф.. smile.gif
В таком случае эти кривые действительно представят собой спирали, и единственный корректный способ нарисовать их - по точкам. То есть надо смоделировать процесс, который я описал выше, провести его с некоторым шагом по времени и соединить точки последовательных положений вершин.

Но меня смущает еще другое.. В условии речь идет о "призме, например, четырехугольной" - а потом вдруг резко появляется параллелограмм, хотя это не единственно возможный четырехугольник. Но, с другой стороны, если это не параллелограмм, а четырехугольник общего вида, то возникает неопределенность относительно центра вращения (на тот самый заданный угол). В случае параллелограмма этот вопрос не возникает, ввиду его симметрии - все полагают, в качестве ЦВ берется пересечение диагоналей, хотя это тоже нигде не сказано..
Кошка, ответишь?
Кошка
Думаю, будет достаточно частного случая четырёхугольника. А за ось вращения взять пересечение диагоналей.
volvo
То есть, ты хочешь получить нечто вроде:

Нажмите для просмотра прикрепленного файла(поворот на 90 градусов)

Нажмите для просмотра прикрепленного файла(на 180)

?
Кошка
yes2.gif Да, именно это и нужно.
При нажатии одной кнопки у меня рисуется призма. Допустим, при нажатии другой она поворачивается. А как мне стереть исходную призму, чтобы преобразованная рисовалась не на ней?
volvo
Это - смотря на чем ты рисуешь... Если на PaintBox-е, то можно просто очищать его полностью:

...
With PaintBox1.Canvas Do Begin
Brush.Style := bsSolid;
Brush.Color := clBtnFace;
FillRect(PaintBox2.ClientRect);
End;
...
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.