一点 p1 point(x1,y1) 相对于另一点 pt point(x,y) 反时针旋转 角度 A 。求旋转后p1的坐标的代码。 (100分)

  • 主题发起人 主题发起人 let_it_be
  • 开始时间 开始时间
L

let_it_be

Unregistered / Unconfirmed
GUEST, unregistred user!
如题,请给出代码。
 
procedure TForm1.Button1Click(Sender: TObject);
function RotatePoint(const P, baseP: TPoint; angle: integer): TPoint;
var x,y: double;
begin
x:=p.x-baseP.x;
y:=p.y-BaseP.y;
result.x:=Round(BaseP.x+x*Cos(Angle*pi/180)-y*Sin(Angle*pi/180));
result.y:=Round(BaseP.y+x*Sin(Angle*pi/180)+y*Cos(Angle*pi/180));
end;
var P1,P2,P3:TPoint;
begin
P1:=Point(100,100);
P2:=Point(100,200);
P3:=RotatePoint(P2,P1,-90); //-为逆时针,
ShowMessage(Format('%d,%d',[P3.X,P3.Y])); //
end;
 
一步到位:
newx:=x1cosA-y1sinA+x(1-cosA)+ysinA;
newy:=x1sinA+y1cosA+y(1-cosA)-xsinA;
 
假设p1旋转后的点为p2
sqrt((pt.x-p2.x)* (pt.x-p2.x)+ (pt.y-p2.y)* (pt.y-p2.y))=m ---1 //m点pt到p1的距离,也是点pt到p2的距离,相当于常量,可以通过数学方法求得
sqrt((p1.x-p2.x)* (p1.x-p2.x)+ (p1.y-p2.y)* (p1.y-p2.y))/2=m*cos(a/2) ---2
解方程1、2不就可以得出p2的坐标了,二元一次方程应该会解吧
 
分数给认真的人!
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
744
import
I
后退
顶部