簡體   English   中英

使用Math.Asin()旋轉點

[英]Rotating a point using Math.Asin()

我試圖繞原點旋轉一個點,並且我已經看過其他方法來做到這一點,但我仍然不明白為什么我的原始代碼無法正常工作。 這是我構建的原始算法。

        decimal[] values = new decimal[] {5.6, 2.4, 8.7};
        decimal hypotenuse = (decimal)Math.Sqrt((double)(values[0] * values[0]) + (double)(values[1] * values[1]) + (double)(values[2] * values[2]));
        decimal x = values[0] / hypotenuse;
        decimal y = values[1] / hypotenuse;
        decimal z = values[2] / hypotenuse;
        decimal checkerhypotenuse = (decimal)Math.Sqrt((double)(x * x) + (double)(y * y) + (double)(z * z));
        values[0] = (decimal)Math.Sin(Math.Asin((double)x) + (double)RotationX) * hypotenuse;
        values[1] = (decimal)Math.Cos(Math.Acos((double)y) + (double)RotationX) * hypotenuse;

values是我的點的x,y和z坐標的集合。 並且沒有返回結果,它沒有正確旋轉。 RotationX是旋轉應繞原點改變的弧度值。

這個概念是,如果Sin(Arcsin(theta))= theta,則Sin(Arcsin(theta)+附加旋轉度)的斜邊應始終等於1,並且看起來應該相等。

您處理(更正)的方法可能適用於2D情況:

    cx = values[0] / hypotenuse;
    cy = values[1] / hypotenuse;

    values[0] = (decimal)Math.Cos(Math.ACos((double)x) + (double)RotationX) * hypotenuse;
    values[1] = (decimal)Math.Sin(Math.ASin((double)y) + (double)RotationX) * hypotenuse;

但是在3D情況下,您的x,y,z是方向余弦 ,而Math.ACos((double)x)在OXY平面中不給出直角。

例如:

values[0] = values[1] = values[2] = 1

點到OXY平面的絕對投影角度為45度。但是,余弦方向為1/Sqrt(3) ,而不是1/Sqrt(2) ,因此使用公式旋轉-45不會提供零坐標。

暫無
暫無

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

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