2011-05-19 49 views

回答

4

如果你是在一個座標系,其中地面由z = c給定,對於某個常數,則可以簡單地計算z = c的線的x,y座標。現在對於原點圓圈x0,y0和半徑R,您只需檢查是否

(x-x0)^ 2 +(y-y0)^ 2 < = R^2。

如果這是真的,則該線與圓相交。

+0

你在哪裏定義了我的3d線的矢量?即時通訊不試圖檢查一個圓內的一個點 – Rookie 2011-05-19 13:40:52

+2

線和圓之間的交點將是一個點。如果該點在圓內,則該線相交。 – unwind 2011-05-19 13:55:29

+0

我不明白這一點,但我會嘗試......我只是想知道爲什麼你不定義z在那裏 – Rookie 2011-05-19 15:24:54

4

在3D意義上,你首先關心的不是一個圓,而是關於圓所在的平面。然後你可以找到射線(線)和平面(盤)之間的交點。

我喜歡用點,平面和線的齊次座標,我希望你熟悉矢量點·和交叉產品×。這裏是方法:

平面(圓盤)由點向量r=[rx,ry,rz]和法線方向向量n=[nx,ny,nz]定義。他們一起組成一架飛機W=[W1,W2]=[n,-r·n]

線(射線)由兩個點向量r_A=[rAx,rAy,rAz]r_B=[rBx,rBy,rBz]定義。它們一起形成L=[L1,L2]=[r_B-r_A, r_A×r_B]

交點被定義P=[P1,P2]=[L1×W1-W2*L2, -L2·W1]或膨脹出作爲

P=[ (r_B-r_A)×n-(r·n)*(r_A×r_B), -(r_A×r_B)·n ] 

該點的座標被發現r_P = P1/P2其中P1具有三個元件和P2是標量的線。

一旦你有了座標,你可以通過d=sqrt((r_p-r)·(r_p-r))檢查與圓心的距離並檢查d<=R其中R是圓的半徑。注意:標量乘*和積之間的符號的差異·

如果你肯定知道圓趴在地上(r=[0,0,0])和麪向上(n=[0,0,1]),那麼你可以做出很多簡化到的高於一般情況。

[參考:Plucker Coordinates]

更新:

當使用地面(具有+ Z向上)作爲平面(其中圓圈躺下),然後使用r=[rx,ry,0]n=[0,0,1]和上述交點簡化爲

r_p = [ rBy-rAy, rAx-rBx, 0]/(rAy*rBx-rAx*rBy) 

其中您可以檢查到圓心的距離。

+0

我不知道點和交叉產品... – Rookie 2011-05-19 15:22:09

+1

然後在http://en.wikipedia.org/wiki/Dot_product **&** http://en.wikipedia.org/wiki/Cross_product查看它們 – ja72 2011-05-19 16:25:36

+0

即時通訊不是數學家,我不明白那東西 – Rookie 2011-05-19 19:56:23