mirror of
https://github.com/zeldaret/tww.git
synced 2026-05-23 15:01:33 -04:00
64dd688ddd
(COND) == 0 and !(COND) both only match sometimes, but (void)((COND) || ...) seems to work all the time.
56 lines
1.6 KiB
C++
56 lines
1.6 KiB
C++
//
|
|
// Generated by dtk
|
|
// Translation Unit: c_m2d.cpp
|
|
//
|
|
|
|
#include "SSystem/SComponent/c_m2d.h"
|
|
#include "SSystem/SComponent/c_m3d.h"
|
|
#include "SSystem/SComponent/c_m3d_g_cir.h"
|
|
#include "JSystem/JUtility/JUTAssert.h"
|
|
|
|
/* 80249DAC-8024A0E0 .text cM2d_CrossCirLin__FR8cM2dGCirffffPfPf */
|
|
void cM2d_CrossCirLin(cM2dGCir& circle, f32 x0, f32 y0, f32 x1, f32 y1, f32* pDstX, f32* pDstY) {
|
|
f32 fVar1 = x0 - circle.GetCx();
|
|
f32 fVar15 = y0 - circle.GetCy();
|
|
f32 dVar13 = x1 * x1 + y1 * y1;
|
|
f32 dVar14 = 2.0f * ((x1 * fVar1) + (y1 * fVar15));
|
|
f32 c = (fVar1 * fVar1 + fVar15 * fVar15) - (circle.GetR() * circle.GetR());
|
|
f32 t;
|
|
|
|
JUT_ASSERT(0x47, c < 0.0f);
|
|
|
|
if (cM3d_IsZero(dVar13)) {
|
|
if (!cM3d_IsZero(dVar14)) {
|
|
t = -c / dVar14;
|
|
}
|
|
} else {
|
|
f32 dVar10 = ((dVar14 * dVar14) - (4.0f * dVar13) * c);
|
|
if (cM3d_IsZero(dVar10)) {
|
|
t =(-dVar14 / (2.0f * dVar13));
|
|
} else {
|
|
if (dVar10 < 0.0f) {
|
|
} else {
|
|
f32 fVar2 = 1.0f / (2.0f * dVar13);
|
|
f32 fVar15 = sqrtf(dVar10);
|
|
fVar15 = fVar2 * (-dVar14 + fVar15);
|
|
f32 fVar16 = sqrtf(dVar10);
|
|
f32 fVar4 = fVar2 * (-dVar14 - fVar16);
|
|
if (fVar15 > fVar4) {
|
|
t = fVar15;
|
|
} else {
|
|
t = fVar4;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
if (cM3d_IsZero(t)) {
|
|
*pDstX = x0;
|
|
*pDstY = y0;
|
|
} else {
|
|
JUT_ASSERT(0x89, t >= 0.0f);
|
|
*pDstX = x0 + (t * x1);
|
|
*pDstY = y0 + (t * y1);
|
|
}
|
|
}
|