会员
众包
新闻
博问
闪存
赞助商
HarmonyOS
Chat2DB
所有博客
当前博客
我的博客
我的园子
账号设置
会员中心
简洁模式
...
退出登录
注册
登录
Yuxon's Blog
竹坞无尘水槛清 相思迢递隔重城 秋阴不散霜飞晚 留得枯荷听雨声
判断线段相交及求交
public
TNode TCrossNode(TNode P1, TNode P2, TNode Q1, TNode Q2)
{
if
(
!
TSegmentCrossed(P1, P2, Q1, Q2))
return
null
;
TNode cross
=
new
TNode();
if
(Math.Abs(P1.Sx
-
P2.Sx)
<
ERR)
{
if
(Math.Abs(Q1.Sx
-
Q2.Sx)
<
ERR)
return
null
;
else
{
cross.Sx
=
P1.Sx;
cross.Sy
=
(Q1.Sy
-
Q2.Sy)
/
(Q1.Sx
-
Q2.Sx)
*
P1.Sx
+
Q1.Sy
-
(Q1.Sy
-
Q2.Sy)
/
(Q1.Sx
-
Q2.Sx)
*
Q1.Sx;
return
cross;
}
}
else
if
(Math.Abs(Q1.Sx
-
Q2.Sx)
<
ERR)
{
cross.Sx
=
Q1.Sx;
cross.Sy
=
(P1.Sy
-
P2.Sy)
/
(P1.Sx
-
P2.Sx)
*
Q1.Sx
+
P1.Sy
-
(P1.Sy
-
P2.Sy)
/
(P1.Sx
-
P2.Sx)
*
P1.Sx;
return
cross;
}
else
if
(Math.Abs(P1.Sy
-
P2.Sy)
<
ERR)
{
if
(Math.Abs(Q1.Sy
-
Q2.Sy)
<
ERR)
return
null
;
else
{
cross.Sy
=
P1.Sy;
cross.Sx
=
(Q1.Sx
-
Q2.Sx)
/
(Q1.Sy
-
Q2.Sy)
*
P1.Sy
+
Q1.Sx
-
(Q1.Sx
-
Q2.Sx)
/
(Q1.Sy
-
Q2.Sy)
*
Q1.Sy;
return
cross;
}
}
else
if
(Math.Abs(Q1.Sy
-
Q2.Sy)
<
ERR)
{
cross.Sy
=
Q1.Sy;
cross.Sx
=
(P1.Sx
-
P2.Sx)
/
(P1.Sy
-
P2.Sy)
*
Q1.Sy
+
P1.Sx
-
(P1.Sx
-
P2.Sx)
/
(P1.Sy
-
P2.Sy)
*
P1.Sy;
return
cross;
}
else
{
double
k1
=
0
, k2
=
0
;
//
斜率
double
a1
=
0
, a2
=
0
;
//
截距
k1
=
(P1.Sy
-
P2.Sy)
/
(P1.Sx
-
P2.Sx);
k2
=
(Q1.Sy
-
Q2.Sy)
/
(Q1.Sx
-
Q2.Sx);
a1
=
P1.Sy
-
k1
*
P1.Sx;
a2
=
Q1.Sy
-
k2
*
Q1.Sx;
if
(Math.Abs(k1
-
k2)
<
ERR)
return
null
;
cross.Sx
=
(a2
-
a1)
/
(k1
-
k2);
cross.Sy
=
(a2
-
a1)
/
(k1
-
k2)
*
k1
+
a1;
//
点斜式
return
cross;
}
}
posted on
2006-06-28 10:07
口俞克木公
阅读(
1759
) 评论(
4
)
收藏
举报
刷新页面
返回顶部
导航
博客园
首页
新随笔
联系
订阅
管理
公告