高中數學的三維空間概念在計算機圖學派上用場了!
第一次的作業part1要做眼睛、平面、球體的關係,
從眼睛一點(a0,b0,c0)到平面的一點(a1,b1,c1)為一條線,
看這條線是否能夠「打」到球體中心(x0,y0,z0)半徑r。
上頭參數為已知,關係如下:
sphere: (x-x0)^2+(y-y0)^2+(z-z0)^2=r^2
ray: (x,y,z)=(a0,b0,c0)+(a1-a0,b1-b0,c1-c0)*t
剩下t為未知參數,
只要將t算出來,就可知有沒有打中!
其中t為一值者,切到球體,
t為兩值者,穿過球體,
t為無值者,沒有碰到球體。
# expand sphere equation:
(x^2-2x*x0+x0^2)+(y^2-2y*y0+y0^2)+(z^2-2z*z0+z0^2)=r^2
# substitute x for ray equation:
x^2 =(a0+(a1-a0)t)^2
=a0^2+2a0(a1-a0)t+(a1*t-a0*t)^2
=a0^2+2a0*a1*t-2a0^2*t+a1^2*t^2-2a1*a0*t^2+a0^2*t^2
-2x*x0 =-2×0(a0+(a1-a0)t)
=-2a0*x0-2a1*x0*t+2a0*x0*t
x0^2
# y & z the same as above
# sort equation:
at^2+bt+c=0
a =a1^2-2a1*a0+a0^2
+b1^2-2b1*b0+b0^2
+c1^2-2c1*c0+c0^2
=(a1-a0)^2+(b1-b0)^2+(c1-c0)^2
b =2a0*a1-2a0^2 – 2a1*x0+2a0*x0
+2b0*b1-2b0^2 – 2b1*y0+2b0*y0
+2c0*c1-2c0^2 – 2c1*z0+2c0*z0
=2[a0(a1-a0)+x0(a0-a1)+b0(b1-b0)+y0(b0-b1)+c0(c1-c0)+z0(c0-c1)]
=2[(a0-x0)(a1-a0)+(b0-y0)(b1-b0)+(c0-z0)(c1-c0)]
c =a0^2-2a0*x0
+b0^2-2b0*y0
+c0^2-2c0*z0
+x0^2+y0^2+z0^2
-r^2
=(a0-x0)^2+(b0-y0)^2+(c0-z0)^2-r^2
t=(-b+-(b^2-4ac)^(0.5))/2a
接下來就放多顆球來玩玩看效果,
看在平面上的圓會不會變形。
若要來打平面也可用方程式來解喔!
隨意留個言吧:)~