圆弧与线段交点算法

前段时间要做一个工具,要求能判断是否与弧线相交,并求出交点。当时使用的GDI,可把我难坏了。


有以下两个问题:

1. 三点画弧线问题

2. 线段与弧线交点问题


首先,要解决的是三点弧线问题。我有点不大清楚,为什么很多GDI库,不提供这个功能啊。这个问题最大难点是如何计算外接矩形,并把起止弧度算出来。三点肯定是确定一个圆弧的(或者线段)。

1)圆心:两个未知数

2)半径:一个未知数

总共有未知数,三个点当然也是可确定三个方程,但是开平方是没必要的。高中的时候,我们就知道尺规作图求圆心,不就是两个直线的交点嘛。(这两个直线,大家应该知道吧。)就这样,现在纸上把a,b,r的表达式都写出来,用已知坐标代入就可以了。


其次,扫描弧度如何计算。GDI的起止弧度使用的是顺时针,它的Y轴方向很重要,可能和你纸上谈兵不一样。对你来说,那就是逆时针,逆时针偏差角度(负值)。


最后,就是求线段与弧线的交点了。这个可是复杂度最高的了。先要判断是否有交点,再解决交点坐标。在没有Matrix的时代,纯粹使用数学公式感觉太复杂了,超出了控制。那如何降低复杂度,还能求出交点呢。让Matrix再飞一会吧!


移到原点之后,再旋转一下,一下子就豁然开朗了。线段的X坐标还用你烦吗(线段的两个端点的X值变成一样了)。那就剩下求Y值了,不过首先要确定是否有这个交点。接着判断一下|X|值与半径的关系,如果小于半径则肯定与圆有交点了。但是是否与弧线有交点呢,可以把弧线的弧度范围,与直线切割的弧线比较。


算出所有东西之后,再用Matrix反运算,就一切OK了。


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

欣爸爸

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值