簡體   English   中英

用x軸計算角度的最快方法

[英]fastest way to compute angle with x-axis

計算直線和x軸之間角度的最快方法是什么?

我需要定義一個函數,它在PI:2PI間隔是Injective(我必須在最高點和下面的任何點之間的角度)。

PointType * top = UPPERMOST_POINT;
PointType * targ = TARGET_POINT;

double targetVectorX = targ->x - top->x;
double targetVectorY = targ->y - top->y;

第一次嘗試

//#1
double magnitudeTarVec = sqrt(targetVectorX*targetVectorX + targetVectorY*targetVectorY);
angle = tarX / magTar;

第二次嘗試

//#2 slower
angle = atan2(targetVectorY, targetVectorX);

我不需要直接角度(弧度或度數),只要通過比較這種值從2點我可以判斷哪個角度更大,任何值都可以。 (例如,示例1中的角度介於-1和1之間(它是余弦參數))

我剛剛編寫了最快的方法來按角度對矢量進行排序,而沒有實際計算角度中找到函數單調的一般問題的角度,沒有任何代碼或與C ++或類似的連接。 基於目前接受的答案,我現在建議

double angle = copysign( // magnitude of first argument with sign of second
  1. - targetVectorX/(fabs(targetVectorX) + fabs(targetVectorY)),
  targetVectorY);

目前接受的答案相比,最大的好處是您不必擔心無限值,因為所有非零向量(即targetVectorXtargetVectorY不會同時等於零)將導致有限偽角值。 對於實際角度[-π...π],得到的偽角將在[-2 ... 2]的范圍內,因此符號和不連續性就像你從atan2得到它們一樣。

檢查y是否為atan2; 然后商x / y會很好。 (假設我理解正確)。

暫無
暫無

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

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