捕鱼用到的数学知识

1   三点决定一个圆,切不能3点一线

  • (x1−x0)^2+(y1−y0)^2=r^2
  • (x2−x0)^2+(y2−y0)^2=r^2
  • (x3−x0)^2+(y3−y0)^2=r^2

代码块:


---@return UnityEngine.Vector3
---@return number
function FishTools.GetCircle(pt1, pt2, pt3 )
    local  radius
    local x1,x2,x3 = pt1.x, pt2.x,  pt3.x
    local y1,y2,y3 = pt1.y, pt2.y,  pt3.y
    local a = x1 - x2
    local b = y1 - y2
    local c = x1 - x3
    local d = y1 - y3
    local e = ((x1 * x1 - x2 * x2) + (y1 * y1 - y2 * y2)) / 2.0
    local f = ((x1 * x1 - x3 * x3) + (y1 * y1 - y3 * y3)) / 2.0
    local det = b * c - a * d

    if( math.abs(det) < 0)then
        radius = -1
        return Vector3(0,0)
    end

    local x0 = -(d * e - b * f) / det
    local y0 = -(a * f - c * e) / det
    radius = math.sqrt((x1 - x0)*(x1 - x0)+(y1 - y0)*(y1 - y0))-- hypot(x1 - x0, y1 - y0)
    return Vector3(x0, y0),radius
end

2 圆弧方向判断方法

根据p1,p2,p3 的顺序计算圆弧的方向p1_p3的方向是顺时针还是逆时针
设p1=(x1,y1) 
 p2=(x2,y2)
 p3=(x3,y3)  
求向量  

   p12=(x2-x1,y2-y1)    

   p23=(x3-x2,y3-y2)   
则当 p12与p23的叉乘(向量积)  

   p12 x   p23  =   (x2-x1)*(y3-y2)-(y2-y1)*(x3-x2)  
   
  为正时,p1-p2-p3   路径的走向为逆时针,  
  为负时,p1-p2-p3   走向为顺时针,  
  为零时,p1-p2-p3   所走的方向不变,亦即三点在一直线上。

可以应用在判断三点确定圆弧,圆弧是逆时针画,还是顺势针画。 

3 已知圆上p1,p2,p3 三点 求3点的连接成的弧的角度

(应该是夹角 和 弧方向一起决定角度)

0)根据1求出圆心c

 1)根据2的知识点求出弧度的方向

 2)求出x轴到p1向量的角度,记 angle1,求出x轴到p3向量的角度,记 angle2

 3)(1,0) 到 起始点的逆时针角度 angle1,(1,0) 到 终点的逆时针角度 angle2

      如果方向是逆时针那么 之间的角度为:angle2-angle1 ,顺时针为 angle1-angle2。如果小于0+360

local vr = UnityEngine.Vector3.Cross(p1_p2, p2_p3)
if(vr.z>0)then--逆时针
    moveAngle = angle2-angle1
else--顺时针
    moveAngle = angle1-angle2
end

参考文章

三点决定一个圆

圆弧方向判断方法和三点确定一个圆的计算方法

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值