|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Вращение многоугольника вокруг заданной точки
Координаты точек обращены на угол фи подсчитывает. Проблема соединить их, выдает ошибку. Помогите, буду очень благодарен.
Код:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, CheckLst, Spin; type TForm1 = class(TForm) Label1: TLabel; Label2: TLabel; ListBox1: TListBox; ListBox2: TListBox; SpinEdit1: TSpinEdit; Button1: TButton; procedure FormMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; x1,y1,sx,sy,n:integer; xa: array [1..100 ]of integer; ya: array [1..100 ]of integer; implementation {$R *.dfm} procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if (button=mbright) then begin canvas.MoveTo(x,y); x1:=x; y1:=y; listbox1.Items.Add(IntToStr(x)); listbox2.Items.Add(IntToStr(y)); end; if (ssShift in Shift) then begin canvas.LineTo(x,y); listbox1.Items.Add(IntToStr(x)); listbox2.Items.Add(IntToStr(y)); end; sx:= StrToInt(listbox1.Items[0]); sy:= StrToInt(listbox2.Items[0]); if (((x>(sx-10))and (x<(sx+10)))and((y<(sy+10))and (y>(sy-10)))) then begin canvas.LineTo(sx,sy); end; end; procedure TForm1.Button1Click(Sender: TObject); var i,a,TempX,TempY:integer; an:real; p: array of TPoint; begin a:=spinedit1.Value; An:=(a+180)*(3.14/180); n:=listbox1.Count; for i:=1 to n do begin xa[i]:= StrToInt(listbox1.Items[i-1]); ya[i]:= StrToInt(listbox2.Items[i-1]); TempX:=xa[1]-xa[i]; TempY :=ya[1]-ya[i]; p[i].X:=Trunc( Cos( An) * TempX - Sin( An) * TempY ); p[i].Y:=Trunc( Sin( An) * TempX + Cos( An) * TempY ); form1.Canvas.Polygon(p); end; end; end. Последний раз редактировалось Admin, 21.05.2012 в 21:09. |
#2
|
||||
|
||||
Что за ошибка?
может проблема здесь: Код:
xa[i]:= StrToInt(listbox1.Items[i-1]); ya[i]:= StrToInt(listbox2.Items[i-1]); — Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |
#3
|
|||
|
|||
системная ошибка, а затем выбивает delphi и пишет ''Variable 'p' might not have been initialized.
Код:
xa[i]:= StrToInt(listbox1.Items[i-1]); ya[i]:= StrToInt(listbox2.Items[i-1]); Здесь ошыбки точно нет p[i].X:=Trunc( Cos( An) * TempX - Sin( An) * TempY ); p[i].Y:=Trunc( Sin( An) * TempX + Cos( An) * TempY ); form1.Canvas.Polygon(p); // вот здесь гдето но я незнаю где Последний раз редактировалось Bargest, 21.05.2012 в 22:44. |
#4
|
||||
|
||||
Во первых память не выделена.
— Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |
#5
|
|||
|
|||
Можете точнее обяснить
|
#6
|
||||
|
||||
Код:
p[i].X:=Trunc( Cos( An) * TempX - Sin( An) * TempY ); p[i].Y:=Trunc( Sin( An) * TempX + Cos( An) * TempY ); Цитата:
Код:
procedure TForm1.Button1Click(Sender: TObject); var i,a,TempX,TempY:integer; an:real; p: array of TPoint; begin a:=spinedit1.Value; An:=(a+180)*(3.14/180); n:=listbox1.Count-1; SetLength(p,n);// выделяем память for i:=0 to n do .... Finalize(p);// освобождаем память Понять, что хочет заказчик - бесценно, ведь он платит MasterCard |
#7
|
|||
|
|||
У меня ничего не получается скину исходник исправьте пожалуйста
|
#8
|
||||
|
||||
исходники не смотрел, еще исправьте:
Код:
for i:=0 to n do begin xa[i]:= StrToInt(listbox1.Items[i]); ya[i]:= StrToInt(listbox2.Items[i]); TempX:=xa[0]-xa[i]; TempY :=ya[0]-ya[i]; p[i].X:=Trunc( Cos( An) * TempX - Sin( An) * TempY ); p[i].Y:=Trunc( Sin( An) * TempX + Cos( An) * TempY ); form1.Canvas.Polygon(p); Finalize(p); end; Понять, что хочет заказчик - бесценно, ведь он платит MasterCard Последний раз редактировалось cotseec, 21.05.2012 в 22:22. |
#9
|
|||
|
|||
К сожалению не работает. Спасибо за помощь
|
#10
|
|||
|
|||
ну если
SetLength(p,n);// выделяем память то for i:=0 to n-1 do |
#11
|
||||
|
||||
icWasya, я думал автор сам до этого додумается.
— Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |
#12
|
|||
|
|||
ошибки нет но и нет работает
|