MCPcopy Create free account
hub / github.com/ByteArena/box2d / Initialize

Method Initialize

CollisionB2Collision.go:270–347  ·  view source on GitHub ↗

B2Collision.cpp

(manifold *B2Manifold, xfA B2Transform, radiusA float64, xfB B2Transform, radiusB float64)

Source from the content-addressed store, hash-verified

268///////////////////////////////////////////////////////////////////////////////
269
270func (wm *B2WorldManifold) Initialize(manifold *B2Manifold, xfA B2Transform, radiusA float64, xfB B2Transform, radiusB float64) {
271 if manifold.PointCount == 0 {
272 return
273 }
274
275 switch manifold.Type {
276 case B2Manifold_Type.E_circles:
277 {
278 wm.Normal.Set(1.0, 0.0)
279 pointA := B2TransformVec2Mul(xfA, manifold.LocalPoint)
280 pointB := B2TransformVec2Mul(xfB, manifold.Points[0].LocalPoint)
281 if B2Vec2DistanceSquared(pointA, pointB) > B2_epsilon*B2_epsilon {
282 wm.Normal = B2Vec2Sub(pointB, pointA)
283 wm.Normal.Normalize()
284 }
285
286 cA := B2Vec2Add(pointA, B2Vec2MulScalar(radiusA, wm.Normal))
287 cB := B2Vec2Sub(pointB, B2Vec2MulScalar(radiusB, wm.Normal))
288
289 wm.Points[0] = B2Vec2MulScalar(0.5, B2Vec2Add(cA, cB))
290 wm.Separations[0] = B2Vec2Dot(B2Vec2Sub(cB, cA), wm.Normal)
291 }
292 break
293
294 case B2Manifold_Type.E_faceA:
295 {
296 wm.Normal = B2RotVec2Mul(xfA.Q, manifold.LocalNormal)
297 planePoint := B2TransformVec2Mul(xfA, manifold.LocalPoint)
298
299 for i := 0; i < manifold.PointCount; i++ {
300 clipPoint := B2TransformVec2Mul(xfB, manifold.Points[i].LocalPoint)
301 cA := B2Vec2Add(
302 clipPoint,
303 B2Vec2MulScalar(
304 radiusA-B2Vec2Dot(
305 B2Vec2Sub(clipPoint, planePoint),
306 wm.Normal,
307 ),
308 wm.Normal,
309 ),
310 )
311 cB := B2Vec2Sub(clipPoint, B2Vec2MulScalar(radiusB, wm.Normal))
312 wm.Points[i] = B2Vec2MulScalar(0.5, B2Vec2Add(cA, cB))
313 wm.Separations[i] = B2Vec2Dot(
314 B2Vec2Sub(cB, cA),
315 wm.Normal,
316 )
317 }
318 }
319 break
320
321 case B2Manifold_Type.E_faceB:
322 {
323 wm.Normal = B2RotVec2Mul(xfB.Q, manifold.LocalNormal)
324 planePoint := B2TransformVec2Mul(xfB, manifold.LocalPoint)
325
326 for i := 0; i < manifold.PointCount; i++ {
327 clipPoint := B2TransformVec2Mul(xfA, manifold.Points[i].LocalPoint)

Callers

nothing calls this directly

Calls 10

B2TransformVec2MulFunction · 0.85
B2Vec2DistanceSquaredFunction · 0.85
B2Vec2SubFunction · 0.85
B2Vec2AddFunction · 0.85
B2Vec2MulScalarFunction · 0.85
B2Vec2DotFunction · 0.85
B2RotVec2MulFunction · 0.85
SetMethod · 0.45
NormalizeMethod · 0.45
OperatorNegateMethod · 0.45

Tested by

no test coverage detected