2015-10-30 77 views
0

我想從vector3中獲得垂直向量3。有誰知道我該怎麼做?也許旋轉vector3 90度或somthing,有沒有vector3函數可以做到這一點?Unity3d垂直向量3

*編輯 enter image description here

*編輯

這就是我想要的,我想我的對象的底部面對我的表面(或一個點),我怎麼能做到這一點?我嘗試過Quaternion.LookRotation和Transform.Lookat,但它們都使用我的對象的向前向量。我知道我也可以在這些功能中定義世界向量,但問題是我沒有一個。

enter image description here

+0

你能提供一點點細節嗎?你可以乘以矢量,它可以得到相同的矢量,但方向不同。例如:'Vector3 newVector3 = originalVector3 * Vector3.right'爲您提供originalVector,但指向其右側。這是相對的。計算四元數可能更加準確和強大,但它要複雜得多。 – Andy

+0

我添加了一張圖片 –

回答

0

這個固定:

Vector3 dir = ground.position - obj.position; 
obj.rotation = Quaternion.FromToRotation(obj.up, dir) * obj.rotation; 
0

在三維空間中這垂直向量不是唯一的。然而,給定另一個向量,你可以得到一個垂直於它們的新向量。

Vector3 v1; 
Vector3 v2; 
Vector3 v3 = Vector3.Cross(v1, v2); 
0

事情是,在3D空間中存在無限量的垂直於任何給定向量的向量。你需要一個不與第一個矢量平行的第二個矢量來尋找一個垂直於它們的矢量,即它們的cross product,因爲這樣定義了一個平面,它可能只有一條垂直線。

在Unity中,交叉乘積是通過靜態方法Vector3.Cross()來計算的。

+0

我編輯了我的問題:) –

0

要回答你原來的問題:如何計算垂直於另一個向量?

讓我們打電話給你的矢量p,我們正在尋找的矢量垂直於它q。請注意,有無數的矢量q,但我們只是要找到一個。

對於垂直向量,點積總是0,所以我們找到方程p · q = 0,我們可以寫爲p.x * q.x + p.y * q.y + p.z * q.z = 0。現在我們將分配任意值到q.xq.y以修復一個解決方案,讓我們選擇q.x = 1q.y = 1。然後我們剩下p.x + p.y + p.z * q.z = 0。解決q.z給我們q.z = -(p.x + p.y)/p.z

結論:矢量q = (1, 1, -(p.x + p.y)/p.z)垂直於p