![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | 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]); |
|
#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
|
||||
|
||||
|
Во первых память не выделена.
|
|
#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);// освобождаем память |
|
#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; Последний раз редактировалось cotseec, 21.05.2012 в 22:22. |
|
#9
|
|||
|
|||
|
К сожалению не работает. Спасибо за помощь
|
|
#10
|
|||
|
|||
|
ну если
SetLength(p,n);// выделяем память то for i:=0 to n-1 do |
|
#11
|
||||
|
||||
|
icWasya, я думал автор сам до этого додумается.
|
|
#12
|
|||
|
|||
|
ошибки нет но и нет работает
|