好的,所以我正在用c ++制作这个有趣的小游戏,不幸的是我不得不制作一个“雷达”,我被困在这部分
(编辑,我已经A
& B
,我唯一没有的是C
& D
)
所以我需要做的是计算2d vector
&的两点(C
)。 D
,他们需要像我上面显示的lil pic一样位于展示位置(抱歉,我知道这很糟糕)。
B
会围绕A
轮换,所以我需要计算C
&的位置。 D
基于B
围绕A
旋转了多少C
。我将创建一个三角形(例如,从D
到D
,B
到B
& A
到A
画一条线
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
希望我已经把我的问题措辞得足够好了,谢谢你的阅读!
答案 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°旋转,因此您无需使用昂贵的功能,例如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;