Skip to content

Instantly share code, notes, and snippets.

@Alexander-r
Created February 12, 2020 16:05
Show Gist options
  • Save Alexander-r/937980a0bf7f04d8335db71f17b65d1d to your computer and use it in GitHub Desktop.
Save Alexander-r/937980a0bf7f04d8335db71f17b65d1d to your computer and use it in GitHub Desktop.
#include <Box2D/Box2D.h>
#include <stdio.h>
void TestCPPComplianceShapeCast()
{
b2Vec2 m_vAs[b2_maxPolygonVertices];
int32_t m_countA;
double m_radiusA;
b2Vec2 m_vBs[b2_maxPolygonVertices];
int32_t m_countB;
double m_radiusB;
m_vAs[0].Set(-0.5f, 1.0f);
m_vAs[1].Set(0.5f, 1.0f);
m_vAs[2].Set(0.0f, 0.0f);
m_countA = 3;
m_radiusA = b2_polygonRadius;
m_vBs[0].Set(-0.5f, -0.5f);
m_vBs[1].Set(0.5f, -0.5f);
m_vBs[2].Set(0.5f, 0.5f);
m_vBs[3].Set(-0.5f, 0.5f);
m_countB = 4;
m_radiusB = b2_polygonRadius;
b2Transform transformA;
transformA.p = b2Vec2(0.0f, 0.25f);
transformA.q.SetIdentity();
b2Transform transformB;
transformB.SetIdentity();
b2ShapeCastInput input;
input.proxyA.Set(m_vAs, m_countA, m_radiusA);
input.proxyB.Set(m_vBs, m_countB, m_radiusB);
input.transformA = transformA;
input.transformB = transformB;
input.translationB.Set(8.0f, 0.0f);
b2ShapeCastOutput output;
bool hit = b2ShapeCast(&output, &input);
b2Transform transformB2;
transformB2.q = transformB.q;
transformB2.p = transformB.p + output.lambda * input.translationB;
b2DistanceInput distanceInput;
distanceInput.proxyA.Set(m_vAs, m_countA, m_radiusA);
distanceInput.proxyB.Set(m_vBs, m_countB, m_radiusB);
distanceInput.transformA = transformA;
distanceInput.transformB = transformB2;
distanceInput.useRadii = false;
b2SimplexCache simplexCache;
simplexCache.count = 0;
b2DistanceOutput distanceOutput;
b2Distance(&distanceOutput, &simplexCache, &distanceInput);
printf("hit = %s, iters = %d, lambda = %g, distance = %.15f", hit ? "true" : "false", output.iterations, output.lambda, distanceOutput.distance);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment