簡體   English   中英

計算旋轉精度

[英]Calculating accuracy of rotation

所以我有一個包含旋轉度數的變量,我有一個理想的旋轉度,我想要的是兩個方向上 20 度以內的精度百分比。

var actualRotation = 215
var idealRotation = 225

var accuracy = magicFunction(actualRotation, idealRotation)

在這種情況下, actualRotation是關閉的,從10度idealRotation ,所以在任一方向的20度的閾值,這是一個50%的准確性。 所以accuracy的值為0.5

var accuracy = magicFunction(225, 225)  // 1.0
var accuracy = magicFunction(225, 210)  // 0.25
var accuracy = magicFunction(245, 225)  // 0.0
var accuracy = magicFunction(90, 225)   // 0.0

我怎樣才能做到這一點?

試試這個(只需運行代碼片段):

 function magicFunction(actualRotation , idealRotation ) { var diff = Math.abs(actualRotation - idealRotation); var accurrancy = 1 - (diff / 20); accurrancy = accurrancy < 0 ? 0 : accurrancy; return accurrancy; } console.log("225, 225: ", magicFunction(225, 225)); console.log("225, 210: ", magicFunction(225, 210)); console.log("245, 225: ", magicFunction(245, 225)); console.log("90, 225: ", magicFunction(90, 225));

var actualRotation = 215
var idealRotation = 225
var diff = abs(actualRotation - idealRotation);
if (diff > 20) 
   console.log(0);
else{
   accuracy = 1 - (diff/ 20);
   console.log(accuracy);
 }

以前的答案很好,但他們沒有處理差異跨越零奇異性的情況。

例如,當角度為5355 時,您預計相差 10,但簡單的減法得到 350。要糾正此問題,如果角度大於 180,則從 360 中減去該角度。

要使上述工作正常進行,您還需要角度在[0, 360)范圍內。 然而,這是一個簡單的模計算,如下所示。

代碼:

 function normalize(angle) { if (angle < 0) return angle - Math.round((angle - 360) / 360) * 360; else if (angle >= 360) return angle - Math.round(angle / 360) * 360; else return angle; } function difference(angle1, angle2) { var diff = Math.abs(normalize(angle1) - normalize(angle2)); return diff > 180 ? 360 - diff : diff; } function magicFunction(actualRotation, idealRotation, limit) { var diff = difference(actualRotation, idealRotation); return diff < limit ? 1.0 - (diff / limit) : 0.0; } // tests console.log(difference(10, 255)); // 115 (instead of the incorrect answer 245) console.log(magicFunction(5, 355, 20)); // 0.5 (instead of 0 as would be returned originally)


編輯:為什么以前的方法不足的圖形說明:

在此處輸入圖片說明

暫無
暫無

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

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