Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.148.115.202] |
|
Сообщ.
#1
,
|
|
|
помогите написать программу,чтобы выводила движения квадрата(заданы его центр и угол поворота),линейное перемещение,плиз!
|
Сообщ.
#2
,
|
|
|
Цитата ann @ помогите написать программу,чтобы выводила движения квадрата(заданы его центр и угол поворота),линейное перемещение,плиз! В чем конкретный вопрос? |
Сообщ.
#3
,
|
|
|
нужно вывести на экран движение квадрата, как он вращается и при этом движется прямо...
|
Сообщ.
#4
,
|
|
|
Ну, так выводи. Это твое задание... Или показывай, что пыталась сделать и что не получается, поможем...
|
Сообщ.
#5
,
|
|
|
Цитата ann @ помогите написать программу,чтобы выводила движения квадрата(заданы его центр и угол поворота),линейное перемещение,плиз! поворот как делать не знаю, это чистейшая математика, а про движение, нужно смотреть в сторону подпрограмм из модуля GRAPH.TPU такие как putImage, getImage и опции XOR_PUT (исключающее ИЛИ..если нет вырезать, если есть то вставить (грубо говоря если да то нет, если нет то да))... все мое маленькое имхо... |
Сообщ.
#6
,
|
|
|
Цитата FasterHarder @ GetImage+PutImage идут лесом, для этой задачи они не нужны. Поскольку квадрат рисуется линиями, достаточно SetWriteMode(XORPut) и рисовать квадрат дважды: первый раз - для отображения, второй - для затирания, перед изменениями координат вывода. Выйдет гораздо проще и быстрее, чем с GetImage/PutImage.а про движение, нужно смотреть в сторону подпрограмм из модуля GRAPH.TPU такие как putImage, getImage и опции XOR_PUT Итого, автору надо написать процедуру: Procedure Draw(Center: PointType; angle: integer); , которая рисует квадрат, получая точку-центр(вокруг которой все крутится) и текущий угол поворота. Этих данных (вместе с длиной стороны квадрата) вполне достаточно, чтобы вычислить положение всех 4-х точек, и соединить их линиями. Для начала это лучше сделать на бумаге, а потом - запрограммировать... |
Сообщ.
#7
,
|
|
|
Цитата а про движение, нужно смотреть в сторону подпрограмм из модуля GRAPH.TPU такие как putImage, getImage и опции XOR_PUT Не обязательно. Есть проц-ра SetWriteMode, у которой тоже есть режим XORPut. А сам квадрат можно выводить линиями.. |
Сообщ.
#8
,
|
|
|
Цитата volvo877 @ Поскольку квадрат рисуется линиями, достаточно SetWriteMode(XORPut) и рисовать квадрат дважды: первый раз - для отображения, второй - для затирания, перед изменениями координат вывода. соглашусь... по моему вы в одном примере так и сделали и выглядело очень красиво и не было ужасного мерцания как при getImage / putImage.. помню даже было задание, с движением круга, реализовывал с putImage и мерцало страшно, сейчас понимаю, что просто перерисовыть линии по контуры фигуры гораздо удобнее и главное красивее будет смотреться.... спасибо за замечание.... |
Сообщ.
#9
,
|
|
|
Цитата FasterHarder @ поворот как делать не знаю, это чистейшая математика Координаты точки после поворота NewX:=x*cos(alfa)-y*sin(alfa); NewY:=y*cos(alfa)+x*sin(alfa); Соответственно, автору нужно создать матрицу поворота, занеся в нее координаты всех вершин многоугольника |
Сообщ.
#10
,
|
|
|
Я вам всем очень благодарна за советы
|
Сообщ.
#11
,
|
|
|
Цитата Булат Шакиров @ создать матрицу поворота Не поможете написать и вывести из неё угол поворота? |
Сообщ.
#12
,
|
|
|
zvygin1964
Вопрос непонятен, нужно его уточнить. |
Сообщ.
#13
,
|
|
|
Цитата zvygin1964 @ Вот матрица поворота (против часовой стрелки) для точек плоскости вокруг начала координат на угол φ в радианах:Не поможете написать и вывести из неё угол поворота? ( cos(φ) -sin(φ) ) ( sin(φ) +cos(φ) ) |
Сообщ.
#14
,
|
|
|
Нужно превратить это в формулу для 5-го класса. Не нужны мне уже подробности высшей математики...
Пока угол поворота определяю так: alpha:=((x2-x1)*(y3-y1)-(y2-y1)*(x3-x1))/2; //угол поворота. А знак показывает слева или справа точка относительно прямой образованной первыми двумя точками.(синтаксис Delphi7) Пробую такой вариант: A = arctg((x1*y2 - y1*x2)/( x1*x2 + y1*y2)) |
Сообщ.
#15
,
|
|
|
Да, вариант alpha:= arctan((x1*y2 - y1*x2)/( x1*x2 + y1*y2)) ;//подошел. Но дает ошибку при пересечении вектором осей координат.
|
Сообщ.
#16
,
|
|
|
Цитата zvygin1964 @ Вроде бы даёт ошибку только когда вектор p1p2 нулевой... Или ещё когда то? подошел. Но дает ошибку при пересечении вектором осей координат. |
Сообщ.
#17
,
|
|
|
Устранено в вопросе: Найти угол пересечения прямых
Надо делать так: alpha:= arctan(((x1*y2) - (y1*x2))/((x1*x2) + (y1*y2))) ; //(синтаксис Delphi) |