|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
18.01.2011, 16:28 | #1 |
Пользователь
Регистрация: 19.11.2010
Сообщений: 13
|
Движение квадрата по наклонной плоскости. НЕ могу найти ошибку
Всем доброго времени суток!
Поставленная задача: реализовать движение кубика по наклонной плоскости (горке) средствами делфи (рисовать на канве ). Встал колом в самом начале...квадрат как то криво поворачивается и становится не совсем квадратом..формулы проверял..должны быть правильными...а в итоге он вообще перестал рисоваться вот код Код HTML:
unit Gorka; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls, ComCtrls; type TGorki = class(TForm) procedure FormCreate(Sender: TObject); private { Private declarations } public { Public declarations } end; var Gorki: TGorki; Cx,Cy,Ax,Bx,Ay,By: integer; // координаты первой горки A1x,A1y,B1x,B1y,C1x,C1y,D1x,D1y: integer; // координаты груза x1,y1,x2,y2,x3,y3: integer;// координаты второй горки d1: integer; // высота первой горки h : integer; // длина ребра грузa alpha1,alpha2: real; // углы наклона горок к горизонту A2x,A2y,B2x,B2y,C2x,C2y,D2x,D2y: integer; implementation uses Math; {$R *.dfm} Procedure Koordinats(Cx,Cy,d1,h:integer); //провожу все необходимые вычисления координат {применяю метод базовой точки- рисую отностительно (Cx,Cy)} begin Ax:=Cx; Ay:=Cy-d1;//вершины первого Bx:=Cx+150; By:=Cy; // треугольника A1x:=Cx; A1y:=Cy-d1;//вершины B1x:=Cx; B1y:=Cy-d1-h;// C1x:=Cx+h; C1y:=Cy-d1-h;// D1x:=Cx+h; D1y:=Cy-d1;//груза alpha1:= (ArcTan(d1/150))/57.3; //в радианах end; Procedure Draw; begin With Gorki.Canvas do begin Pen.Color:=clBlack; MoveTo(Ax,Ay); LineTo(Cx,Cy); //рисую первую LineTo(Bx,By); LineTo(Ax,Ay); //горку end; end; Procedure Rotate_kv(A1x,A1y,B1x,B1y,C1x,C1y,D1x,D1y:integer); begin alpha1:=0.3; ; //в радианах (для пробы) B1x:=Trunc(Cx+(B1x-Cx)*cos(alpha1)-(B1y-Cy)*sin(alpha1));; B1y:=Trunc(Cy+(B1x-Cx)*sin(alpha1)+(B1y-Cy)*cos(alpha1)); C1x:=Trunc(Cx+(C1x-Cx)*cos(alpha1)-(C1y-Cy)*sin(alpha1)); C1y:=Trunc(Cy+(C1x-Cx)*sin(alpha1)+(C1y-Cy)*cos(alpha1)); D1x:=Trunc(Cx+(D1x-Cx)*cos(alpha1)-(D1y-Cy)*sin(alpha1)); D1y:=Trunc(Cy+(D1x-Cx)*sin(alpha1)+(D1y-Cy)*cos(alpha1)); // делаю афинные преобразования (поворачиваю квадрат по часовой стрелки на альфа// With Gorki.Canvas do begin MoveTo(Ax,Ay); LineTo(B1x,B1y); //рисую первую LineTo(C1x,C1y); LineTo(D1x,D1y); LineTo(Ax,Ay); end; end; procedure TGorki.FormCreate(Sender: TObject); begin Cx:=200; Cy:=300; d1:=50; h:=30; WindowState:=wsMaximized; Koordinats(Cx,Cy,d1,h); Draw; Rotate_kv(A1x,A1y,B1x,B1y,C1x,C1y,D1x,D1y) end; end. |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
[C++ Builder] движени колеса по наклонной плоскости | Attenti_ON | Помощь студентам | 0 | 28.11.2010 10:07 |
цилиндр по наклонной плоскости | Михаил1800 | Фриланс | 5 | 12.10.2010 17:00 |
Не могу найти ошибку | Macwin | JavaScript, Ajax | 6 | 13.06.2010 19:36 |
Точки на плоскости, нахождение квадрата | PastoriXx | Общие вопросы .NET | 6 | 28.05.2010 06:45 |
С++. не могу найти ошибку | world12_tk | Помощь студентам | 3 | 25.07.2009 10:47 |