Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.01.2011, 16:28   #1
Rocky095
Пользователь
 
Регистрация: 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.
битый день мучаюсь с этой задачей. Очень надеюсь на вашу помощь.
Rocky095 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[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