c ++根据另外2个点计算2个点
c++ calculating 2 points based off 2 other points
好的,所以我正在用 C++ 制作这个有趣的小游戏,不幸的是我一直在制作 "radar",我被困在这部分
(编辑,我已经有 A
& B
,我唯一没有的是 C
& D
)
所以我需要做的是计算 C
和 D
的两个点 (2d vector
),它们需要像我制作的 lil pic 中那样放置如上所示(抱歉,我知道这很糟糕)。
B
将围绕 A
旋转,所以我需要根据 B
旋转了多少来计算 C
和 D
的位置A
。我要创建一个三角形(例如,从 C
到 D
、D
到 B
和 B
到 A
画一条线)
A
可以认为是三角形底线的圆心,这就像万物的底,万物围绕着A
旋转,而[=13=的位置]&D
需要根据B
绕A
旋转了多少来计算。
为此计算创建 lil 函数的最佳方法是什么?
例如
inline float returnDPoint(float A, float B)
{
float dPoint;
//calculate point of D based off A & B
return dPoint;
}
inline float returnCPoint(float A, float B)
{
float cPoint;
//calculate point of C based off A & B
return cPoint;
}
希望我的问题措辞足够好,感谢阅读!
这里计算得到 C:
auto angle = atan2(b.y-a.y,b.x-a.x) + pi/2.0;
auto radius = sqrt((b.y-a.y)*(b.y-a.y)+(b.x-a.x)*(b.x-a.x));
Point C {a.x + radius * cos(angle), a.y +radius * sin(angle)};
由于您正在寻找 90° 的旋转,因此您不需要使用昂贵的函数,例如 atan2
、sqrt
等。一个简单的替代方法是:
diffx = bx - ax;
diffy = by - ay;
cx = ax - diffy = ax - by + ay;
cy = ay + diffx = ay + bx - ax;
dx = ax + diffy = ax + by - ay;
dy = ay - diffx = ay - bx + ax;
好的,所以我正在用 C++ 制作这个有趣的小游戏,不幸的是我一直在制作 "radar",我被困在这部分
(编辑,我已经有 A
& B
,我唯一没有的是 C
& D
)
所以我需要做的是计算 C
和 D
的两个点 (2d vector
),它们需要像我制作的 lil pic 中那样放置如上所示(抱歉,我知道这很糟糕)。
B
将围绕 A
旋转,所以我需要根据 B
旋转了多少来计算 C
和 D
的位置A
。我要创建一个三角形(例如,从 C
到 D
、D
到 B
和 B
到 A
画一条线)
A
可以认为是三角形底线的圆心,这就像万物的底,万物围绕着A
旋转,而[=13=的位置]&D
需要根据B
绕A
旋转了多少来计算。
为此计算创建 lil 函数的最佳方法是什么? 例如
inline float returnDPoint(float A, float B)
{
float dPoint;
//calculate point of D based off A & B
return dPoint;
}
inline float returnCPoint(float A, float B)
{
float cPoint;
//calculate point of C based off A & B
return cPoint;
}
希望我的问题措辞足够好,感谢阅读!
这里计算得到 C:
auto angle = atan2(b.y-a.y,b.x-a.x) + pi/2.0;
auto radius = sqrt((b.y-a.y)*(b.y-a.y)+(b.x-a.x)*(b.x-a.x));
Point C {a.x + radius * cos(angle), a.y +radius * sin(angle)};
由于您正在寻找 90° 的旋转,因此您不需要使用昂贵的函数,例如 atan2
、sqrt
等。一个简单的替代方法是:
diffx = bx - ax;
diffy = by - ay;
cx = ax - diffy = ax - by + ay;
cy = ay + diffx = ay + bx - ax;
dx = ax + diffy = ax + by - ay;
dy = ay - diffx = ay - bx + ax;