簡體   English   中英

如何通過角度 Vector3 旋轉尺寸 Vector3?

[英]How to rotate a Vector3 of dimensions by a Vector3 of angles?

我有一個向量 3,它表示每個軸上一塊網格中有多少塊。 例如,如果這些向量之一是 (1, 2, 1),它將在 x 軸上長 1 個塊,在 y 軸上長 2 個塊,在 z 軸上長一個塊。 我還有一個角度向量 3,表示沿每個軸的旋轉。 例如,如果這些向量之一是 (90, 180, 0),則該塊將圍繞 x 軸旋轉 90 度,圍繞 y 軸旋轉 180 度,圍繞 z 軸旋轉 0 度。 我想不通的是如何通過其旋轉角度矢量來旋轉一塊的尺寸,所以我知道它占據了空間中的哪些點。

public class Block
{
    private Vector3 localOrientation;
    private Vector3 dimensions;

    public Vector3 GetRotatedDimensions()
    {
         //your implementation here
    }
}

如果我理解正確,那么您的問題存在根本性錯誤。 不能有“旋轉尺寸”。 讓我們用一個矩形來演示這一點。 (我沒有正確理解)

假設有這個初始矩形:

初始矩形

然后你旋轉它。 這就是你得到的:

旋轉后的矩形

使用單個 Vector2,您無法區分“旋轉的 x*y 矩形”和“初始 (x')*(y') 矩形”。 為了充分描述矩形的 position,您需要在塊描述變量中保持大小和旋轉。

x'y'是你想知道的嗎? 我對此表示懷疑。 哦,你會嗎? 偉大的!

在 3 個維度中,我會將您要查找的內容定義為

The minimum dimensions of a rectangular box that
1. has its faces parallel to the XY, XZ and YZ planes and
2. contains another rectangular box of known dimensions and orientation.

可能有更優雅的解決方案,但我會像這樣強行使用它:

  1. 制作 8 個 Vector3 對象(塊的每個頂點一個),
  2. 將它們全部繞 x 軸旋轉。
  3. 圍繞 y 軸旋轉它們(你從“2”得到的新的)。
  4. 圍繞 z 軸旋轉它們(你從“3”得到的新的)。
  5. 找出所有點中 x、y 和 z 坐標的最小值和最大值。
  6. 您的新尺寸將是 (x_max-x_min)、(y_max-y_min)、(z_max-z_min)。

不過,我不是 100% 確定這一點,所以請確保您驗證結果!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM