Неправильный алгоритм с графическим объектом!!!

Egor123
Дата: 06.06.2011 21:26:38
+
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Spin,Math, ExtCtrls;

  type
   Risunok= class(TObject)
   xa,ya,xb,yb,xc,yc,xd,yd,xe,ye,ab,bc,cd,de:integer;
   w,w1,ox:real;
   e,p,l,i,z,c,v,b,g,h:Integer;//êîîðäèíàòû øòðèõîâêè
   procedure data;
   procedure draw;
   end;

type
  TForm1 = class(TForm)//Îïèñàíèå ôîðìû è å¸ îáúêòîâ
    Image1: TImage;
    SpinEdit1: TSpinEdit;
    Button1: TButton;
    procedure SpinEdit1Change(Sender: TObject);
    procedure Button1Click(Sender: TObject);
private
    { Private declarations }
  public
    { Public declarations }
  end;

   var
  Form1: TForm1;
  Ris1:Risunok;

  implementation

{$R *.dfm}

procedure Risunok.data;//Ïðîöåäóðà ðèñîâàíèÿ êèíåìàòè÷åñêîé ñõåìû
begin
xa:=Form1.spinedit1.Value*180;
 xc:=round(form1.Image1.Width/2);
yc:=round(form1.Image1.Height/2);
ya:=yc;
ye:=yc;
ab:=180;
bc:=60;
cd:=60;
de:=180;
// âû÷èñëåíèå êîîðäèíàò òî÷åê îïðåäåëÿþùèõ ïîëîæåíèå ìåõàíèçìà
xd:=xc+round(cd*cos(w));
yd:=yc-round(cd*sin(w));
yb:=yc+round(cd*sin(w));
xb:=xc-round(cd*cos(w));
xa:=xb+round(sqrt(sqr(ab)-sqr(yb-ya)));
xa:=xb-round(ab*cos(w1));
xe:=xd+round(de*cos(w1))
end;

procedure Risunok.draw;
begin
  //ðèñîâàíèå ýëåìåíòîâ ñèñòåìû íà ýêðàíå è ïîäïèñè îñíîâíûõ òî÷åê ìåõàíèçìà
form1.image1.Picture:=nil;
with form1.Image1. Canvas do
begin
Pen.Style:=psSolid;
pen.Color:=clBlack;
Ellipse(xb-4,yb-4,xb+4,yb+4);
Ellipse(xa-4,ya-4,xa+4,ya+4);
Ellipse(xc-4,yc-4,xc+4,yc+4);
Ellipse(xd-4,yd-4,xd+4,yd+4);
Ellipse(xe-4,ye-4,xe+4,ye+4);
Polyline([Point(xc,yc),Point(xc-20,yc+25),Point(xc+20,yc+25),Point(xc,yc)]);
 Rectangle(xa+25,ya+15,xa-25,ya-15);
 MoveTo(ya-25,ya-25);
 LineTo(220,ya-25);
 LineTo(70,ya-25);
 MoveTo(ya+25,ya+25);
 LineTo(220,ya+25);
 LineTo(70,ya+25);
  Rectangle(xe+25,ye+15,xe-25,ye-15);
  MoveTo(650,ye+23);
  lineTo(495,ye+23);
  LineTo(605,ye+23);
  MoveTo(650,ye-23);
  LineTo(495,ye-23);
  LineTo(605,ye-23);
MoveTo(xa,ya);
LineTo(xb,yb);
MoveTo(xe,ye);
LineTo(xd,yd);
LineTo(xb,yb);
lineTo(xd,yd);
moveto(xb,yb);
lineto(xd,yd);
moveto(xb,yb);
lineto(xa,ya);
moveto(xa+5,ya-8);
Textout(xa+5,ya-8,'A');
moveto(xb+5,yb-8);
Textout(xb+5,yb-8,'B');
moveto(xc+5,yc-8);
Textout(xc+5,yc-8,'C');
moveto(xd+5,yd-8);
Textout(xd+5,yd-8,'D');
moveto(xe+5,ye-8);
Textout(xe+5,ye-8,'E');
  //Ðèñîâàíèå øòðèõîâêè
e:=ya+25;
p:=ya-25;
l:=220;
i:=0;
z:=yc+35;
c:=380;
v:=ye+42;
b:=650;
g:=ye-42;
h:=640;
 i:=0;
 while i<=150 do
 begin
 moveto(l-150+i,e);
 lineto(l-150+(i-5),e+20);
 i:=i+5;
 end;
  i:=0;
  while i<=150 do
  begin
  moveto(l-150+i,p);
  lineto(l-150+(i+5),p-20);
  i:=i+5;
  end;
   i:=0;
   while i<=40 do
   begin
   MoveTo(c-40+i,z);
   LineTo(c-40+(i+5),z-10);
   i:=i+5;
   end;
    i:=0;
    while i<=155 do
    begin
    MoveTo(b-150+i,v);
    Lineto(b-150+(i-5),v-20);
    i:=i+5;
    end;
     i:=0;
     while i<=155 do
     begin
     MoveTo(h-150+i,g);
     LineTo(h-150+(i+5),g+20);
     i:=i+5;
     end;
Pen.Style:=psDashDot;
moveto(50,ya);
LineTo(670,ya);
lineto(xe,ye);
end;
end;


procedure TForm1.SpinEdit1Change(Sender: TObject);
 begin
  Ris1:=Risunok.create;
  Ris1.data;
  ris1.draw;
  end;

procedure TForm1.Button1Click(Sender: TObject);
begin
close;
end;

end.


Мне сказали что тут не правильно с заданием,и что должно изменятся
не угол положения объектов,а координата X.....помогите кто что знает!!!...

Модератор: Пользуйтесь тегом (кнопкой) SRC для оформления кода, пожалуйста.
Egor123
Дата: 06.06.2011 23:14:21
Мне препод сказал что по заданию должен изменятся первый объект который в точки А,по оси Х...и я вот не знаю как это мне переделать
DimaBr
Дата: 06.06.2011 23:53:59
Ошибка в 17 строке
ДжекНепотрошитель
Дата: 06.06.2011 23:55:28
Да все правильно там, гонит твой препод. Так ему и скажи: носил к
программистам, они сказали, что все нормально, пусть ставит зачОт
Egor123
Дата: 07.06.2011 00:08:07
Вот моё задание 3.2.
так я понимаю что задание сделано нормально,но надо как на рисунке что бы изменялось положение по оси X,а не от угла
DimaBr
Дата: 07.06.2011 00:26:30
Всё точно так и нарисовано
Egor123
Дата: 07.06.2011 08:13:34
DimaBr,НУ да,только перемещение должно осуществлятся за счёт координаты Х
Egor123
Дата: 09.06.2011 11:30:43
Никто больше не знает?!........
DimaBr
Дата: 09.06.2011 11:38:45
Ничего не понимаю. Вы можете понятнее объяснить.
В вашем примере, изменяя переменную W происходить движение всей системы. А нужно как ?
Egor123
Дата: 09.06.2011 13:57:42
DimaBr,

А нужна изменяя координату Х,первого прямоугольника,и что бы он изменяя кординату двигал всю систему