我不相信你所描述的輸入,(129, 238, 191)
,實際上是與你想要的輸出相同的向量,(0.382027, 0.718028, 0.5818)
。
輸出矢量是單位矢量。即它已被「標準化」,所以它的長度爲1
。理論上,只需將輸入向量的分量除以該向量的長度(即331.3095
),就可以將輸入向量轉換爲規範化格式。這樣做,我得到一個歸一化的矢量(0.389363997, 0.718361482, 0.576500181)
。
要注意這個向量的重要一點是,X和Y分量比你想要的輸出大,而Z分量更小。即這個矢量並不指向與你想要的輸出相同的方向。
在您的示例系統中,可能會有一些舍入誤差導致這種差異,無論是在轉換爲byte
格式還是可能在參考輸出值中。您的問題中沒有足夠的信息來解釋差異。
無論如何,它似乎很清楚,我認爲基本的轉換要求無非就是將來自輸入向量到它的標準形式:
byte bx = 129, by = 238, bz = 191;
double length = Math.Sqrt((bx * bx) + (by * by) + (bz * bz));
double dx = bx/length, dy = by/length, dz = bz/length;
凡bx
,by
和bz
是你的輸入值,並dx
,dy
和dz
是您的輸出。這並不會產生您期望的值,但我相當有信心它會產生您期望的值。
如果您需要比此更具體的任何內容,您必須改進問題,以便它包含有關您的示例使用的數字來自哪裏的更多細節以及爲什麼您認爲它們應代表相同的矢量。
東西是我提供的輸出向量可能有點無效。你的解釋是我能找到的最好的解釋,互聯網上有一些關於歸一化輸入向量的信息,但它不足以理解。非常感謝,你的回答是完美的! –