На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
Дорогие друзья! Поздравляем вас с днём Победы!
msm.ru
Название темы должно быть информативным !
Прежде чем задать вопрос, воспользуйтесь Поиском. и проверьте в FAQ (ЧАВО) Паскаля
Чтобы получить вразумительный ответ, подробно опишите проблему: что надо сделать, что не получается и номер ошибки (если есть), которую выводит компилятор.
Для вставки кода ваших программ используйте, пожалуйста, кнопку СODE=pas или выпадающий список СODE для других языков (подсветка синтаксиса).
[!] Как правильно задавать вопросы | Руководство по языку B.Pascal 7 & Objects/LR | Borland Pascal. Руководство пользователя
Модераторы: volvo877
  
> Вращение + Перемещение квадрата , (переименовано)
    помогите написать программу,чтобы выводила движения квадрата(заданы его центр и угол поворота),линейное перемещение,плиз!
      Цитата ann @
      помогите написать программу,чтобы выводила движения квадрата(заданы его центр и угол поворота),линейное перемещение,плиз!

      В чем конкретный вопрос?
        нужно вывести на экран движение квадрата, как он вращается и при этом движется прямо...
          Ну, так выводи. Это твое задание... Или показывай, что пыталась сделать и что не получается, поможем...
            Цитата ann @
            помогите написать программу,чтобы выводила движения квадрата(заданы его центр и угол поворота),линейное перемещение,плиз!

            поворот как делать не знаю, это чистейшая математика, а про движение, нужно смотреть в сторону подпрограмм из модуля GRAPH.TPU такие как putImage, getImage и опции XOR_PUT (исключающее ИЛИ..если нет вырезать, если есть то вставить (грубо говоря если да то нет, если нет то да))...
            все мое маленькое имхо...
              Цитата FasterHarder @
              а про движение, нужно смотреть в сторону подпрограмм из модуля GRAPH.TPU такие как putImage, getImage и опции XOR_PUT
              GetImage+PutImage идут лесом, для этой задачи они не нужны. Поскольку квадрат рисуется линиями, достаточно SetWriteMode(XORPut) и рисовать квадрат дважды: первый раз - для отображения, второй - для затирания, перед изменениями координат вывода. Выйдет гораздо проще и быстрее, чем с GetImage/PutImage.

              Итого, автору надо написать процедуру:
              ExpandedWrap disabled
                Procedure Draw(Center: PointType; angle: integer);

              , которая рисует квадрат, получая точку-центр(вокруг которой все крутится) и текущий угол поворота. Этих данных (вместе с длиной стороны квадрата) вполне достаточно, чтобы вычислить положение всех 4-х точек, и соединить их линиями. Для начала это лучше сделать на бумаге, а потом - запрограммировать...
                Цитата
                а про движение, нужно смотреть в сторону подпрограмм из модуля GRAPH.TPU такие как putImage, getImage и опции XOR_PUT

                Не обязательно. Есть проц-ра SetWriteMode, у которой тоже есть режим XORPut. А сам квадрат можно выводить линиями..
                  Цитата volvo877 @
                  Поскольку квадрат рисуется линиями, достаточно SetWriteMode(XORPut) и рисовать квадрат дважды: первый раз - для отображения, второй - для затирания, перед изменениями координат вывода.

                  соглашусь...
                  по моему вы в одном примере так и сделали и выглядело очень красиво и не было ужасного мерцания как при getImage / putImage..

                  помню даже было задание, с движением круга, реализовывал с putImage и мерцало страшно, сейчас понимаю, что просто перерисовыть линии по контуры фигуры гораздо удобнее и главное красивее будет смотреться....

                  спасибо за замечание....
                    Цитата FasterHarder @
                    поворот как делать не знаю, это чистейшая математика


                    Координаты точки после поворота
                    ExpandedWrap disabled
                      NewX:=x*cos(alfa)-y*sin(alfa);
                      NewY:=y*cos(alfa)+x*sin(alfa);


                    Соответственно, автору нужно создать матрицу поворота, занеся в нее координаты всех вершин многоугольника
                      Я вам всем очень благодарна за советы :)
                        Цитата Булат Шакиров @
                        создать матрицу поворота

                        Не поможете написать и вывести из неё угол поворота?
                          zvygin1964
                          Вопрос непонятен, нужно его уточнить.
                            Цитата zvygin1964 @
                            Не поможете написать и вывести из неё угол поворота?
                            Вот матрица поворота (против часовой стрелки) для точек плоскости вокруг начала координат на угол φ в радианах:
                            ( cos(φ) -sin(φ) )
                            ( sin(φ) +cos(φ) )
                              Нужно превратить это в формулу для 5-го класса. Не нужны мне уже подробности высшей математики...
                              Пока угол поворота определяю так: alpha:=((x2-x1)*(y3-y1)-(y2-y1)*(x3-x1))/2; //угол поворота. А знак показывает слева или справа точка относительно прямой образованной первыми двумя точками.(синтаксис Delphi7)
                              Пробую такой вариант: A = arctg((x1*y2 - y1*x2)/( x1*x2 + y1*y2))
                              Сообщение отредактировано: zvygin1964 -
                                Да, вариант alpha:= arctan((x1*y2 - y1*x2)/( x1*x2 + y1*y2)) ;//подошел. Но дает ошибку при пересечении вектором осей координат.
                                  Цитата zvygin1964 @
                                  подошел. Но дает ошибку при пересечении вектором осей координат.
                                  Вроде бы даёт ошибку только когда вектор p1p2 нулевой... Или ещё когда то? :whistle:
                                    Устранено в вопросе: Найти угол пересечения прямых

                                    Надо делать так: alpha:= arctan(((x1*y2) - (y1*x2))/((x1*x2) + (y1*y2))) ; //(синтаксис Delphi)
                                    0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                    0 пользователей:


                                    Рейтинг@Mail.ru
                                    [ Script execution time: 0,0373 ]   [ 15 queries used ]   [ Generated: 12.05.24, 16:41 GMT ]