Created
February 12, 2020 16:05
-
-
Save Alexander-r/937980a0bf7f04d8335db71f17b65d1d to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#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