簡體   English   中英

圍繞另一個點旋轉一個點的功能

[英]Function to rotate a point around another point

所以我這里有一個數學函數,該函數應該返回一個旋轉的點,並取一個原始點,點圍繞(原點)旋轉,弧度使它旋轉。

但是,它僅以半速旋轉(也就是180度運動= 90度旋轉)

sf::Vector2f RotatePoint(sf::Vector2f origin, sf::Vector2f point, float radian) {   
    float s = sin(radian);   
    float c = cos(radian);  

    // translate point back to origin:  
    point.x -= origin.x;   
    point.y -= origin.y;   

    // rotate point   
    float xnew = point.x * c - point.y * s;   
    float ynew = point.x * s + point.y * c; 

    // translate point back to global coords:
    sf::Vector2f TranslatedPoint;
    TranslatedPoint.x = xnew + origin.x;  
    TranslatedPoint.y = ynew + origin.y; 

    return TranslatedPoint;
} 

該功能對我來說還可以。 如果您想知道,旋轉只是將向量乘以2D歐幾里德旋轉矩陣(http://en.wikipedia.org/wiki/Rotation_matrix)。 我能想到的唯一錯誤是對函數用法的一些誤解。 例如2 * PI弧度= 360度,或者逆時針旋轉。

你的代碼似乎很好。 我們是否同意180度為度,Pi是弧度?

功能很好。 但是,您可能需要重新學習線性代數:您基本上可以計算

return rotation * (point - origin) + origin;

以旋轉為矩陣,由對角線上的cos(弧度)和非對角線上的+/- sin(弧度)組成。 因此,如果讓您的線性代數庫計算該矩陣,則整個函數將是一個線性函數。 如果除去-origin部分(請記住,線性代數是線性的),它將變為:

return rotation * point + ( - rotation * origin + origin );

其中第二部分是點不變的,可以預先計算。

暫無
暫無

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

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