【问题标题】:c++ calculating 2 points based off 2 other pointsc++ 根据其他 2 个点计算 2 个点
【发布时间】:2016-11-24 16:14:59
【问题描述】:

好的,所以我正在用 C++ 制作这个有趣的小游戏,不幸的是,我被困在制作“雷达”上,我被困在这部分

(编辑,我已经有AB,我唯一没有的是CD

所以我需要做的是计算CD 的两个点(2d vector),它们需要在我上面显示的 lil pic 中的位置(对不起,我知道它是不好)。

B 将围绕A 旋转,所以我需要根据B 围绕A 旋转了多少来计算CD 的位置。我要创建一个三角形(例如,从CDDBBA 画一条线)

A可以认为是三角形底线的中心,这就像一切的底,一切都围绕A旋转,C&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;
}

希望我的问题措辞足够好,感谢阅读!

【问题讨论】:

  • 您必须知道角度才能计算A 的位置。将 pi/2 添加到角度以计算指针在前方四分之一圆的位置,并为另一点添加 3pi/4。三角学。
  • 我已经计算了A的角度。感谢您的评论,我会试试看:)

标签: c++ math rotation trigonometry 2d-vector


【解决方案1】:

下面是计算 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)};

【讨论】:

  • 所以要计算 D 我要做的就是 pi/4.0?
  • 减去 pi/2.0 而不是相加。
【解决方案2】:

由于您正在寻找旋转 90°,因此您不需要使用昂贵的函数,例如 atan2sqrt 等。一个简单的替代方法是:

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;

【讨论】:

  • 可能会。但是,它的规模非常小。所以如果你每帧只调用一次,它不会有什么不同。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多