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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.07.2009, 17:53   #1
kalipsoo
Новичок
Джуниор
 
Регистрация: 13.07.2009
Сообщений: 2
Вопрос Delphi.Треугольник.Вопрос.

Доброго времени суток.Самое банальное задание..но я ответа так и не нашёл.

Задание:построить треугольник по точкам, потом пользователь вводит угол поворота на которой стоит повернуть тр-к и он поворачивается.
использовал такие формулы поворота:
x=xcos(x)-ysin(x)
y=xsin(x)+ycos(x)

q-угол поворта

Вот код
Код:
var
  Form1: TForm1;
  x0,y0:integer;
  x,y,i:integer;
  q,l:real;
  x1,y1:array [1..3] of integer;
  mousepos:tpoint;

implementation

{$R *.dfm}


procedure TForm1.Button1Click(Sender: TObject);
begin

  x1[1]:=strtoint(edit1.Text); y1[1]:=strtoint(edit2.Text);
  x1[2]:=strtoint(edit3.Text); y1[2]:=strtoint(edit4.Text);
  x1[3]:=strtoint(edit5.Text); y1[3]:=strtoint(edit6.Text);


InvalidateRect(0, nil, true);


Canvas.Brush.Color:=clBlack;
Canvas.MoveTo(x1[1], y1[1]);
Canvas.LineTo(x1[2], y1[2]);
Canvas.LineTo(x1[3], y1[3]);
Canvas.LineTo(x1[1], y1[1]);
end;



procedure TForm1.Button2Click(Sender: TObject);


begin





q:=strtoint(edit7.Text);

begin
for i:=1 to 3 do
x1[i]:=trunc(x1[i]*cos(q)-y1[i]*sin(q));
end;

for i:=1 to 3 do
y1[i]:=trunc(x1[i]*sin(q)+y1[i]*cos(q));


InvalidateRect(0, nil, true);


Canvas.Brush.Color:=clBlack;
Canvas.MoveTo(x1[1], y1[1]);
Canvas.LineTo(x1[2], y1[2]);
Canvas.LineTo(x1[3], y1[3]);
Canvas.LineTo(x1[1], y1[1]);
end;



end.

подскажите..если не трудно,что делаю не так) Заранее спасибо.

Последний раз редактировалось kalipsoo; 13.07.2009 в 17:55.
kalipsoo вне форума Ответить с цитированием
Старый 13.07.2009, 18:14   #2
Goodwin98
equ asm
Участник клуба
 
Аватар для Goodwin98
 
Регистрация: 02.05.2009
Сообщений: 1,605
По умолчанию

Я конечно не силен дельфи, но может все же так.
Код:
procedure TForm1.Button2Click(Sender: TObject);


begin





q:=strtoint(edit7.Text);

begin
for i:=1 to 3 do
temp:=trunc(x1[i]*cos(q)-y1[i]*sin(q));

y1[i]:=trunc(x1[i]*sin(q)+y1[i]*cos(q));
x1[i]=temp
end;

InvalidateRect(0, nil, true);


Canvas.Brush.Color:=clBlack;
Canvas.MoveTo(x1[1], y1[1]);
Canvas.LineTo(x1[2], y1[2]);
Canvas.LineTo(x1[3], y1[3]);
Canvas.LineTo(x1[1], y1[1]);




end.
Какой вопрос - такой ответ. Не забываем пользоваться поиском, гуглом.
Помощь в выполнении работ по ассемблеру ICQ:2725322O4

Последний раз редактировалось Goodwin98; 13.07.2009 в 18:22.
Goodwin98 вне форума Ответить с цитированием
Старый 13.07.2009, 18:30   #3
kalipsoo
Новичок
Джуниор
 
Регистрация: 13.07.2009
Сообщений: 2
По умолчанию

Попробовал..эффекта никакого...) сам треугольник строится..но чтобы он нормально поворачивался на угол..такого не заметил)

Последний раз редактировалось kalipsoo; 13.07.2009 в 19:00.
kalipsoo вне форума Ответить с цитированием
Старый 13.07.2009, 19:11   #4
Goodwin98
equ asm
Участник клуба
 
Аватар для Goodwin98
 
Регистрация: 02.05.2009
Сообщений: 1,605
По умолчанию

У меня поворачивает.
Код:
var
  Form1: TForm1;
  x0,y0:integer;
  x,y,i,temp:integer;
  q,l:real;
  x1,y1:array [1..3] of integer;
  mousepos:tpoint;

implementation

{$R *.dfm}


procedure TForm1.Button1Click(Sender: TObject);
begin

  x1[1]:=100; y1[1]:=100;
  x1[2]:=200; y1[2]:=200;
  x1[3]:=50; y1[3]:=300;


InvalidateRect(0, nil, true);


Canvas.Brush.Color:=clBlack;
Canvas.MoveTo(x1[1], y1[1]);
Canvas.LineTo(x1[2], y1[2]);
Canvas.LineTo(x1[3], y1[3]);
Canvas.LineTo(x1[1], y1[1]);
end;

procedure TForm1.Button2Click(Sender: TObject);

begin

q:=0.157; //   pi/20

for i:=1 to 3 do
begin
temp:=trunc(x1[i]*cos(q)-y1[i]*sin(q));
y1[i]:=trunc(x1[i]*sin(q)+y1[i]*cos(q));
x1[i]:=temp;
end;

InvalidateRect(0, nil, true);

Canvas.Brush.Color:=clBlack;
Canvas.MoveTo(x1[1], y1[1]);
Canvas.LineTo(x1[2], y1[2]);
Canvas.LineTo(x1[3], y1[3]);
Canvas.LineTo(x1[1], y1[1]);
 end;

end.
Какой вопрос - такой ответ. Не забываем пользоваться поиском, гуглом.
Помощь в выполнении работ по ассемблеру ICQ:2725322O4

Последний раз редактировалось Goodwin98; 13.07.2009 в 19:14.
Goodwin98 вне форума Ответить с цитированием
Старый 14.07.2009, 09:29   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Могу предложить свой вариант вращения:
Код:
unit Unit1;

interface

uses     math,
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    procedure draw(cx,cy,BeginAngle:real; n,r:integer;kr:integer=0);
    procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

//********* PROCEDURE**********
procedure TForm1.draw;
var rx,ry,x,y,angle, rang, ang:real;e,i:integer;
 atp:array of TPoint;
begin

//cx:=form1.Width div 2;cy:=form1.Height div 2;
//if kr>0 then
ang:=360/n;
angle:=(2*pi*ang)/360; rang:=angle;
SetLength(atp,n);
with form1 do begin
  //********* FOR ******************
  for  i:=0  to n  do
  begin
   //canvas.MoveTo(cx,cy);
   rx:=(cos(angle+BeginAngle));
   ry:=(sin(angle+BeginAngle));
   atp[i].X:=round(cx+r*(rx));
   atp[i].Y:=round(cy+r*(ry));
 //  canvas.LineTo(round(x),round(y));
 angle:=angle+rang;
   end;
  //******* END FOR ****************
  Canvas.FillRect(ClientRect);
  Canvas.Polygon(atp);
end;
//form1.Canvas.LineTo(100,100);
end;

//********* END PROCEDURE*******



procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  draw(100,100,(width/360)*(x/360),3,100);
end;

end.
Тут поворот идет при движении мышки
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вписывание окружности в треугольник (Delphi) stimswall Помощь студентам 10 19.03.2009 20:14
delphi 9 или delphi 2005 вопрос о работе Doget Компоненты Delphi 0 07.07.2008 08:50
Треугольник serega11 Помощь студентам 2 22.05.2008 09:01