怎么判断一个点是否在三角形外接圆内部

jilu0002 2004-10-24 02:07:54
?
...全文
1007 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
mathe 2004-10-27
  • 打赏
  • 举报
回复
其中sgn(x)表示x的符号:
sgn(x)=(x<0)?-1:((x==0)?0:1);
mathe 2004-10-27
  • 打赏
  • 举报
回复
比如A(x1,y1),B(x2,y2),C(x3,y3)
那么 AB=(x2-x1,y2-y1), AC=(x3-x1,y3-y1)
AB.AC=(x2-x1)(x3-x1)+(y2-y1)(y3-y1)
同样计算DB.DC
而|AB|=sqrt( (x2-x1)^2 + (y2-y1)^2), |AB|^2 = (x2-x1)^2 + (y2-y1)^2.

然后我们需要判断A和D是分布在BC的同侧还是异侧
分别将A,D的坐标带入直线BC的方程 f(x,y)=(x-x2)*(y3-y2)-(y-y2)*(x3-x2),
如果f(A)和f(D)同号,A和D在BC的同侧,如果异号,A和D在BC的两侧:
i)如果A和D在BC的同侧,那么角BDC<角BAC时,D在三角形ABC外接圆内部。
也就是cos(角BDC)>cos(角BAC)时,D在三角形ABC外接圆内部。
也就是sgn(AB.AC)*(AB.AC)^2 *|DB|^2 *|DC|^2 < sgn(DB.DC) *(DB.DC)^2 *|AB|^2 *|AC|^2
时在外接圆内部。如果相等是正好在圆周上。
ii)如果A和D在BC的异侧,那么当角BDC+角BAC>180度时,D在外接圆内部。
也就是cos(角BDC)<-cos(角BAC)时,D在外接圆内部。
也就是-sgn(AB.AC)*(AB.AC)^2 *|DB|^2 *|DC|^2 > sgn(DB.DC) *(DB.DC)^2 *|AB|^2 *|AC|^2
时在外接圆内部。如果相等是正好在圆周上。
jilu0002 2004-10-26
  • 打赏
  • 举报
回复
mathe的方法很好,不过你能更详细的解释一下求两条边夹角的余弦值的方法吗?我这里先谢过了.
xiaoxiaofei 2004-10-26
  • 打赏
  • 举报
回复
纯数学计算,当然可以减小甚至避免误差,但是如果编程计算(特别是处理图像),误差简直是避免不了滴.如果不是处理图像:可以尽量减小误差;
如果处理数字图像:因为图像坐标只能为1(象素)的整数,大可不必一定要精确到0.000几去.
其实三点的均值不是中心吗?算出一点到中心的距离为半径r,计算待判断的点到中心的距离与r比较就行了.
HUNTON 2004-10-26
  • 打赏
  • 举报
回复
S((x1*x1+y1*y1, y1), (x2*x2+y2*y2, y2), (x3*x3+y3*y3, y3))
外心:x0 = -----------------------------------------------------------
2*S(A,B,C)

S((x1,x1*x1+y1*y1), (x2, x2*x2+y2*y2), (x3, x3*x3+y3*y3))
y0 = -----------------------------------------------------------
2*S(A,B,C)

剩下的应该不用说什么做了吧。
HUNTON 2004-10-26
  • 打赏
  • 举报
回复
告诉你一个公式吧。
定义:设平面上的三点A(x1,y1),B(x2,y2),C(x3,y3),定义
|x1 x2 x3|
S(A,B,C) = |y1 y2 y3|
|1 1 1 |

三角形之心求解公式如下:
已知三角形的三个顶点为A(x1,y1),B(x2,y2),C(x3,y3),则该三角形的外心为:
jilu0002 2004-10-25
  • 打赏
  • 举报
回复
在做除法或做三角函数运算时因为变量储存长度的局限,必然会导致精度丢失,当然会有误差.另外精度问题也会使角度的加减造成极小的偏差,那一些本来在圆内部的点被判在圆外,不是冤枉死了?
MadLee 2004-10-25
  • 打赏
  • 举报
回复
看不懂,顶一下
mathe 2004-10-25
  • 打赏
  • 举报
回复
边长就需要用余弦定理了。
huhuhu5 2004-10-25
  • 打赏
  • 举报
回复
呵呵 行 ~~!!!
huhuhu5 2004-10-25
  • 打赏
  • 举报
回复
mathe() 的方法不错啊
可是 如果从已知求角不好求 而从边长下手 有没有不错的方法呢?>
mathe 2004-10-25
  • 打赏
  • 举报
回复
用我给的方法可以完全采用定点计算,就不会有任意误差了。
其实角度可以用两条边夹角的余弦值来表示(而余弦可以用两边的内积除以边长表示)
也就是
看AB . AC /(|AB|*|AC|) (其中 .表示内积)
和DB . DC /(|DB|*|DC|),
实际上比较
|DB|*|DC| (AB.AC)

|AB|*|AC| (DB .DC)
就可以了,也就是可以避免除法。
而且除了保持两个式子的符号以外,比较时可以同时平方一下,可以避免开根号。余下的就只有加减乘,都不会引入误差。
然后我们只要根据上面两式的符号和绝对值大小就可以判断是在内接园内部还是外部了。
syy64 2004-10-25
  • 打赏
  • 举报
回复
1、用双精度数;
2、设置阈值,对于浮点数,肯定是在一定精度的条件下达到要求,没有绝对的真值。
syy64 2004-10-24
  • 打赏
  • 举报
回复
三点定圆,圆是唯一的,还有误差?
mathe 2004-10-24
  • 打赏
  • 举报
回复
不需要计算外接圆。
假设三角形ABC,如果点D在三角形内部显然在外接圆内部。
不然,那么必然在某一条边外侧,不妨设D和A分布在BC两侧,而且在角BAC内部。
计算角BAC+角BDC,如果小于180度;在外接圆外部,等于180度在外接圆上;大于180度,在外接圆内部。
jilu0002 2004-10-24
  • 打赏
  • 举报
回复
但是在计算圆心坐标时,因为误差会算出3个,无法取舍,半径也就有3个,怎么办?
syy64 2004-10-24
  • 打赏
  • 举报
回复
1、首先根据三角形的三个顶点求出圆心的坐标和圆的半径;
2、计算被测点与圆心的距离;
3、判断比较,距离小于半径在内部,否则在外部。

33,028

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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