c ++基于2个其他点计算2个点

时间:2016-11-24 16:15:00

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

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

Example

(编辑,我已经A& B,我唯一没有的是C& D

所以我需要做的是计算2d vector&的两点(C)。 D,他们需要像我上面显示的lil pic一样位于展示位置(抱歉,我知道这很糟糕)。

B会围绕A轮换,所以我需要计算C&的位置。 D基于B围绕A旋转了多少C。我将创建一个三角形(例如,从DDBB& AA画一条线

A可以被认为是三角形底线的中心,这就像是一切的基础,一切都在C左右旋转,D&的位置; B需要根据A周围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; } 的轮换次数来计算。

为此计算制作lil函数的最佳方法是什么? e.g。

@if (Carbon\Carbon::now()->between(Carbon\Carbon::parse($edition->start), Carbon\Carbon::parse($edition->limit)))
    <div class="tombol-nav">
      <a href="../journal/create?edition={{$edition->id}}" class="btn btn-primary">Upload Jurnal Anda Sekarang!</a><br>
      <p style="color: red;">Penting! Batas waktu terakhir pengunggahan Jurnal pada Edisi ini : {{ Carbon\Carbon::parse($edition->limit)->format('j F, Y') }}</p>
    </div>
@else
    <p></p>
@endif

希望我已经把我的问题措辞得足够好了,谢谢你的阅读!

2 个答案:

答案 0 :(得分: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)};

答案 1 :(得分:1)

由于您正在寻找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;