[Unity]已知圆点和射线 求射线与圆相交的一点

来源:互联网 发布:悠悠乎与颢气俱 编辑:程序博客网 时间:2024/05/16 12:51


参考资料1:

magnitude  Returen the length of vector(Read Only).

然后就试了一下这个方法。

Vector3 P1 = new Vector3(1,1,1);

Vector3 P2 = new Vector3(2,2,2);

print((P1-P2).magnitude);


已知圆心、半径、角度,求出圆上的点坐标 

//  圆点坐标:(orignX,orignY)
//  半径:r
//  角度:angle
//         
//  则圆上任一点为:(x1,y1)
var x1 = orignX + r * Mathf.Cos(angle * Mathf.Deg2Rad );
var y1 = orignY + r * Mathf.Sin(angle * Mathf.Deg2Rad );

--------------------------------------------------------------------------------------------------------求圆和直线交点坐标

根据参考资料 5 直线方程的几种表达方式

(1)一般式:Ax+By+C=0 (其中A、B不同时为0) 
(2)点斜式:y-y0=k(x-x0) 
(3)截距式:x/a+y/b=1
(4)斜截式: Y=KX+B (K≠0) 
(5)两点式:(y-y0)/(y0-y1)=(x-x0)/(x0-x1) 


根据参考资料6 直线方程从 两点式 转换 为 一般式

(y-y1)/(y2-y1)=(x-x1)/(x2-x1)
(y-y1)(x2-x1)=(x-x1)(y2-y1)
(y2-y1)x-(x2-x1)y-x1(y2-y1)+y1(x2-x1)=0


确定的一点 的坐标(x1, y1)另外一点的坐标(x2,y2)

方程 1:

(y2-y1)x - (x2-x1)y = x1(y2-y1)-y1(x2-x1);

 (y2-y1)x  = x1(y2-y1)-y1(x2-x1)+(x2-x1)y ;

由直线的一般方程x=ky+b,把 上面的方程 和下面 的解,的值进行变化 ,根据 参考资料 8


由方程2x=ky+b

解:

x = [ x1(y2-y1) - y1 (x2 - x1) ] / (y2 - y1) + [ (x2 -x1) ] / ( y2 - y1 )  ;

k = (x2 -x1) / ( y2 - y1  );

b = [ x1(y2-y1) - y1 (x2 - 1) ] / (y2 - y1);


根据参考资料7  圆的方程:

两种情形:
1.这个点是圆心 由(x-a)^2+(y-b)^2=r^2可直接得出.
2.这个点在圆上,那么条件不够,还需圆上另一个不同的点.首先设圆方程(x-a)^2+(y-b)^2=r^2,再把两点坐标代入得一个二元方程组,从而求出a,b.

圆心坐标(m,n)

(x - a)^2 + (y-b)^2 = r ^2

由于上面的 改为 方程3: (x -m)^2 + (y - n)^2 = r^2

方程2 的解 x , k , b 带入 方程3 

(ky + b - m )^2 + (y - n)^2 = r^2


(k^2 + 1) y^2 + [ 2k(b - m) - 2n]y+ n^2 + (b - m)^2 - r^2 = 0

根据参考资料8 

公式法

≥0时,方程有解;<0时,方程无解。先化为一般形式再用公式。


ex^2 + fx+ g =0 

e = (k^2 + 1)

f = [ 2k(b - m) - 2n]

g = n^2 + (b - m)^2 - r^2 

圆心坐标(m,n)

k = (x2 -x1) / ( y2 - y1  );

b = [ x1(y2-y1) - y1 (x2 - 1) ] / (y2 - y1);

一点 的坐标(x1, y1)另外一点的坐标(x2,y2)


判断 e^2 - 4 f g

有解 ,则 


数学 与 编程的区别 ,编程 可以 直接用逻辑判断

数学必须通过算式 进行计算,得到准确的答案。


然而 编程 如果 使用大量变量  进行 精确计算,会使用大量 double 变量

使得程序变慢。

逻辑判断的重要性。



--------------------------------------------------------------------------------------------------------


参考资料:

1.

偶然发现的Unity3d,两点之间的距离计算。

2.已知圆心、半径、角度,求出圆上的点坐标

3.unity3d 在一个空心圆范围内随机生成物体

4.

Unity Mathf 数学运算(C#)

5.直线方程的几种表达方式?

6.直线的两点式方程如何转化为一般式

7.知道圆心半径和一个点怎么求圆的方程

8.

为什么社x=ky+b而不设y=kx+b

9.一元二次方程的解法例析

10.