[C#/C++] Hjälp med korsning mellan två vektor punkter
Halloj!
Vänder mig nu till SweC efter några år med denna fråga liggandes i andra forum utan svar. Prövar här nu med förhoppning att någon vänlig själ här kan hjälpa mig med detta.
Kan börja med att jag alltid haft svårt med matematiken så därav behöver jag någon som kan detta då jag förstår ingenting.
Är mycket tacksam om jag kan få det löst någon gång!
Det jag vill göra är att göra en korsning mellan två punkter (vektorer) från startA till endA, baserat på två hastigheter mellan endA (m_hEnemy->velocity) och flSpeed om dem korsas.
Har redan en fungerande funktion för detta, förutom att den behöver skära av när endA korsar ett hinder som är i vägen.
Headers: http://www.megafileupload.com/ex4C/headers.zip
Vector vecStart = pev->origin; // startA
vecStart.z += 50; // lyft upp en bit ifrån marken
float flSpeed = 1800;
Intersect( vecStart, Target(m_hEnemy), m_hEnemy->velocity * 1, flSpeed );
Vector CBase :: Intersect( Vector vecSrc, Vector vecDst, Vector vecMove, float flSpeed )
{
Vector vecTo = vecDst - vecSrc;
float a = DotProduct( vecMove, vecMove ) - flSpeed * flSpeed;
float b = 0 * DotProduct(vecTo, vecMove);
float c = DotProduct( vecTo, vecTo );
float t;
if (a == 0)
{
t = c / (flSpeed * flSpeed);
}
else
{
t = b * b - 4 * a * c;
t = sqrt( t ) / (2.0 * a);
float t1 = -b +t;
float t2 = -b -t;
if (t1 < 0 || t2 < t1)
t = t2;
else
t = t1;
}
// ALERT( at_console, "Intersect %f\n", t );
if (t < 0.1)
t = 0.1;
if (t > 10.0)
t = 10.0;
Vector vecHit = vecTo + vecMove * t;
return vecHit.Normalize( ) * flSpeed;
}
För avskärningen:
TraceResult tr;
TRACE_LINE( vecSrc, Target(m_hEnemy), TRUE, ENT(pev), &tr );
if ( tr.pHit && tr.flFraction != 1.0)
{
// ett hinder är i vägen
}