[英]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.