Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Графика и игры
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 21.05.2012, 20:20
Mazahacka Mazahacka вне форума
Прохожий
 
Регистрация: 21.05.2012
Сообщения: 6
Репутация: 10
По умолчанию Вращение многоугольника вокруг заданной точки

Координаты точек обращены на угол фи подсчитывает. Проблема соединить их, выдает ошибку. Помогите, буду очень благодарен.
Код:
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  
Старый 21.05.2012, 20:33
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Что за ошибка?
может проблема здесь:
Код:
xa[i]:= StrToInt(listbox1.Items[i-1]);
ya[i]:= StrToInt(listbox2.Items[i-1]);
?
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
  #3  
Старый 21.05.2012, 20:47
Mazahacka Mazahacka вне форума
Прохожий
 
Регистрация: 21.05.2012
Сообщения: 6
Репутация: 10
По умолчанию

системная ошибка, а затем выбивает 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: не забываем про оформление кода!

Последний раз редактировалось Bargest, 21.05.2012 в 22:44.
Ответить с цитированием
  #4  
Старый 21.05.2012, 21:06
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Во первых память не выделена.
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
  #5  
Старый 21.05.2012, 21:10
Mazahacka Mazahacka вне форума
Прохожий
 
Регистрация: 21.05.2012
Сообщения: 6
Репутация: 10
По умолчанию

Можете точнее обяснить
Ответить с цитированием
  #6  
Старый 21.05.2012, 21:46
Аватар для cotseec
cotseec cotseec вне форума
Активный
 
Регистрация: 16.07.2008
Сообщения: 353
Версия Delphi: D7,TDE06,RAD09
Репутация: 1443
По умолчанию

Код:
p[i].X:=Trunc( Cos( An) * TempX - Sin( An) * TempY );
p[i].Y:=Trunc( Sin( An) * TempX + Cos( An) * TempY );
идет обращение к еще невыделенной памяти, поэтому и
Цитата:
а затем выбивает delphi и пишет ''Variable 'p' might not have been initialized.
Код:
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  
Старый 21.05.2012, 22:00
Mazahacka Mazahacka вне форума
Прохожий
 
Регистрация: 21.05.2012
Сообщения: 6
Репутация: 10
По умолчанию

У меня ничего не получается скину исходник исправьте пожалуйста
Вложения
Тип файла: rar smpnorm.rar (176.6 Кбайт, 6 просмотров)
Ответить с цитированием
  #8  
Старый 21.05.2012, 22:20
Аватар для cotseec
cotseec cotseec вне форума
Активный
 
Регистрация: 16.07.2008
Сообщения: 353
Версия Delphi: D7,TDE06,RAD09
Репутация: 1443
По умолчанию

исходники не смотрел, еще исправьте:
Код:
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  
Старый 21.05.2012, 22:27
Mazahacka Mazahacka вне форума
Прохожий
 
Регистрация: 21.05.2012
Сообщения: 6
Репутация: 10
По умолчанию

К сожалению не работает. Спасибо за помощь
Ответить с цитированием
  #10  
Старый 22.05.2012, 11:57
icWasya icWasya вне форума
Местный
 
Регистрация: 09.11.2010
Сообщения: 499
Репутация: 10
По умолчанию

ну если
SetLength(p,n);// выделяем память
то
for i:=0 to n-1 do
Ответить с цитированием
  #11  
Старый 22.05.2012, 17:04
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

icWasya, я думал автор сам до этого додумается.
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
  #12  
Старый 22.05.2012, 17:30
Mazahacka Mazahacka вне форума
Прохожий
 
Регистрация: 21.05.2012
Сообщения: 6
Репутация: 10
По умолчанию

ошибки нет но и нет работает
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 21:10.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter