求助:有向线段AB、CD,求将CD旋转到AB同方向所旋转的角度!

gbuggit 2002-06-19 07:13:08
有向线段AB、CD,求将CD旋转到AB同方向所旋转的角度!已知AB、CD的坐标和方向!
...全文
98 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
zzwu 2002-06-20
  • 打赏
  • 举报
回复
这种解析几何中的问题我以前做过很多,用Pascal编的,由于求角度必须用到反三角函数,而Pascal中缺少这方面的函数,所以要自己编,较繁. 下面是完整的程序.
看不清的请再提出来.


type angle=real;
point=record
x,y:real;
end;
line2p=record
p1,p2:point
end;

function atan2(dy,dx:real):real;
begin
if dx=0 then
begin
if dy>=0 then atan2:=pi/2 else atan2:=-pi/2;
end
else
begin
if dx>0 then atan2:=arctan(dy/dx)
else
if dy>=0 then atan2:=pi+arctan(dy/dx)
else atan2:=-pi+arctan(dy/dx);
end;
end;

function asin2(a,c:real):angle;
var b:real;
begin
if c*c<=a*a then
begin
if a>0 then asin2:=pi/2
else asin2:=-pi/2;
end
else
begin
b:=sqrt(c*c-a*a);
asin2:=atan2(a,b);
end;
end;

function vprod(l1,l2:line2P):real;
var dx1,dy1,dx2,dy2:real;
begin
dx1:=l1.p2.x-l1.p1.x;
dy1:=l1.p2.y-l1.p1.y;
dx2:=l2.p2.x-l2.p1.x;
dy2:=l2.p2.y-l2.p1.y;
vprod:=dx1*dy2-dx2*dy1
end;

function dprod(l1,l2:line2P):real;
var dx1,dy1,dx2,dy2:real;
begin
dx1:=l1.p2.x-l1.p1.x;
dy1:=l1.p2.y-l1.p1.y;
dx2:=l2.p2.x-l2.p1.x;
dy2:=l2.p2.y-l2.p1.y;
dprod:=dx1*dx2+dy1*dy2
end;


function dist(p1,p2:point):real;
var dx,dy:real;
begin
dx:=p2.x-p1.x;
dy:=p2.y-p1.y;
dist:=sqrt(dx*dx+dy*dy);
end;


function AngleBtw2lines(l1,l2:line2P):real;
var b,a,e,d1,d2:real; l:line2p;
begin
b:=vprod(l1,l2);
d1:=dist(l1.p1,l1.p2);
d2:=dist(l2.p1,l2.p2);
if d1=0 then
begin
writeln('d1=0');
readln;
halt;
end;
if d2=0 then
begin
writeln('d2=0');
readln;
halt;
end;
e:=b/d1/d2;
a:=abs(asin2(e,1));
if dprod(l1,l2)<0 then a:=pi-a;
AngleBtw2lines:=a;
end;

var p1,p2,p3,p4:point;
l1,l2:line2P;
a:angle;
begin
p1.x:=0; p1.y:=0;
p2.x:=1; p2.y:=0;
l1.p1:=p1; l1.p2:=p2;
p3.x:=0; p3.y:=0;
p4.x:=1; p4.y:=1;
l2.p1:=p3; l2.p2:=p4;
a:=AngleBtw2Lines(l1,l2);
writeln('angle=',a*180/pi:0:4);
readln;
end.

本题运行结果为45.0000(度)

4,510

社区成员

发帖
与我相关
我的任务
社区描述
图形图像/机器视觉
社区管理员
  • 机器视觉
  • 迪菲赫尔曼
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧