Refine search
/** Get the centroid and apply the supplied transform. */ public Vec2 centroid(final Transform xf) { return Transform.mul(xf, m_centroid); }
public ParticleGroup createParticleGroup(ParticleGroupDef groupDef) { float stride = getParticleStride(); final Transform identity = tempTransform; identity.setIdentity(); Transform transform = tempTransform2; transform.setIdentity(); int firstIndex = m_count; if (groupDef.shape != null) { particleDef.userData = groupDef.userData; Shape shape = groupDef.shape; transform.set(groupDef.position, groupDef.angle); AABB aabb = temp; int childCount = shape.getChildCount(); p.y = y; if (shape.testPoint(identity, p)) { Transform.mulToOut(transform, p, p); particleDef.position.x = p.x; particleDef.position.y = p.y; p.subLocal(groupDef.position); Vec2.crossToOutUnsafe(groupDef.angularVelocity, p, particleDef.velocity); particleDef.velocity.addLocal(groupDef.linearVelocity); createParticle(particleDef); group.m_strength = groupDef.strength; group.m_userData = groupDef.userData; group.m_transform.set(transform); group.m_destroyAutomatically = groupDef.destroyAutomatically; group.m_prev = null;
Vec2[] v2s = poly2.m_vertices; Transform.mulTransToOutUnsafe(xf2, xf1, xf); final Rot xfq = xf.q; Transform.mulToOutUnsafe(xf, v1s[i], v1);
void solveRigid(final TimeStep step) { for (ParticleGroup group = m_groupList; group != null; group = group.getNext()) { if ((group.m_groupFlags & ParticleGroupType.b2_rigidParticleGroup) != 0) { group.updateStatistics(); Vec2 temp = tempVec; Vec2 cross = tempVec2; Rot rotation = tempRot; rotation.set(step.dt * group.m_angularVelocity); Rot.mulToOutUnsafe(rotation, group.m_center, cross); temp.set(group.m_linearVelocity).mulLocal(step.dt).addLocal(group.m_center).subLocal(cross); tempXf.p.set(temp); tempXf.q.set(rotation); Transform.mulToOut(tempXf, group.m_transform, group.m_transform); final Transform velocityTransform = tempXf2; velocityTransform.p.x = step.inv_dt * tempXf.p.x; velocityTransform.p.y = step.inv_dt * tempXf.p.y; velocityTransform.q.s = step.inv_dt * tempXf.q.s; velocityTransform.q.c = step.inv_dt * (tempXf.q.c - 1); for (int i = group.m_firstIndex; i < group.m_lastIndex; i++) { Transform.mulToOutUnsafe(velocityTransform, m_positionBuffer.data[i], m_velocityBuffer.data[i]); } } } }
Transform.mulToOutUnsafe(xfB, circleB.m_p, temp); Transform.mulTransToOutUnsafe(xfA, temp, Q); e.set(B).subLocal(A); float u = Vec2.dot(e, temp.set(B).subLocal(Q)); float v = Vec2.dot(e, temp.set(Q).subLocal(A));
getWorld().setGravity(new Vec2(0.0f, 0.0f)); bd.position.set(0.0f, 20.0f); ground = getWorld().createBody(bd); shape.set(new Vec2(-20.0f, -20.0f), new Vec2(-20.0f, 20.0f)); ground.createFixture(sd); Transform xf1 = new Transform(); xf1.q.set(0.3524f * MathUtils.PI); Rot.mulToOutUnsafe(xf1.q, new Vec2(1.0f, 0.0f), xf1.p); vertices[0] = Transform.mul(xf1, new Vec2(-1.0f, 0.0f)); vertices[1] = Transform.mul(xf1, new Vec2(1.0f, 0.0f)); vertices[2] = Transform.mul(xf1, new Vec2(0.0f, 0.5f)); sd1.density = 4.0f; Transform xf2 = new Transform(); xf2.q.set(-0.3524f * MathUtils.PI); Rot.mulToOut(xf2.q, new Vec2(-1.0f, 0.0f), xf2.p); vertices[0] = Transform.mul(xf2, new Vec2(-1.0f, 0.0f)); vertices[1] = Transform.mul(xf2, new Vec2(1.0f, 0.0f)); vertices[2] = Transform.mul(xf2, new Vec2(0.0f, 0.5f));
localPointA.set(m_proxyA.getVertex(cache.indexA[0])); localPointB.set(m_proxyB.getVertex(cache.indexB[0])); Transform.mulToOutUnsafe(xfa, localPointA, pointA); Transform.mulToOutUnsafe(xfb, localPointB, pointB); m_axis.set(pointB).subLocal(pointA); float s = m_axis.normalize(); return s; m_localPoint.set(localPointB1).addLocal(localPointB2).mulLocal(.5f); Transform.mulToOutUnsafe(xfb, m_localPoint, pointB); localPointA.set(proxyA.getVertex(cache.indexA[0])); Transform.mulToOutUnsafe(xfa, localPointA, pointA); temp.set(pointA).subLocal(pointB); m_localPoint.set(localPointA1).addLocal(localPointA2).mulLocal(.5f); Transform.mulToOutUnsafe(xfa, m_localPoint, pointA); localPointB.set(m_proxyB.getVertex(cache.indexB[0])); Transform.mulToOutUnsafe(xfb, localPointB, pointB); temp.set(pointB).subLocal(pointA);
public void collide(Manifold manifold, final EdgeShape edgeA, final Transform xfA, final PolygonShape polygonB, final Transform xfB) { Transform.mulTransToOutUnsafe(xfA, xfB, m_xf); Transform.mulToOutUnsafe(m_xf, polygonB.m_centroid, m_centroidB); boolean hasVertex3 = edgeA.m_hasVertex3; edge1.set(m_v2).subLocal(m_v1); edge1.normalize(); m_normal1.set(edge1.y, -edge1.x); float offset1 = Vec2.dot(m_normal1, temp.set(m_centroidB).subLocal(m_v1)); Transform.mulToOutUnsafe(m_xf, polygonB.m_vertices[i], m_polygonB.vertices[i]); Rot.mulToOutUnsafe(m_xf.q, polygonB.m_normals[i], m_polygonB.normals[i]); Transform.mulTransToOutUnsafe(m_xf, clipPoints2[i].v, cp.localPoint); cp.id.set(clipPoints2[i].id); } else {
@Override public void initTest(boolean argDeserialized) { input.transformA = new Transform(); input.transformB = new Transform(); { m_transformA = new Transform(); m_transformA.setIdentity(); m_transformA.p.set(0.0f, -0.2f); m_polygonA = new PolygonShape(); m_polygonA.setAsBox(10.0f, 0.2f); } { m_positionB = new Vec2(); m_positionB.set(12.017401f, 0.13678508f); m_angleB = -0.0109265f; m_transformB = new Transform(); m_transformB.set(m_positionB, m_angleB); m_polygonB = new PolygonShape(); m_polygonB.setAsBox(2.0f, 0.1f); } for (int i = 0; i < v.length; i++) { v[i] = new Vec2(); } }
protected MouseJoint(IWorldPool argWorld, MouseJointDef def) { super(argWorld, def); assert (def.target.isValid()); assert (def.maxForce >= 0); assert (def.frequencyHz >= 0); assert (def.dampingRatio >= 0); m_targetA.set(def.target); Transform.mulTransToOutUnsafe(m_bodyB.getTransform(), m_targetA, m_localAnchorB); m_maxForce = def.maxForce; m_impulse.setZero(); m_frequencyHz = def.frequencyHz; m_dampingRatio = def.dampingRatio; m_beta = 0; m_gamma = 0; }
float distanceSqr1 = closestPoint.lengthSquared(); float distanceSqr2 = distanceSqr1; distanceSqr2 = closestPoint.lengthSquared(); if (d.lengthSquared() < Settings.EPSILON * Settings.EPSILON) { Rot.mulTransUnsafe(transformA.q, d.negateLocal(), temp); vertex.indexA = proxyA.getSupport(temp); Transform.mulToOutUnsafe(transformA, proxyA.getVertex(vertex.indexA), vertex.wA); Rot.mulTransUnsafe(transformB.q, d.negateLocal(), temp); vertex.indexB = proxyB.getSupport(temp); Transform.mulToOutUnsafe(transformB, proxyB.getVertex(vertex.indexB), vertex.wB); vertex.w.set(vertex.wB).subLocal(vertex.wA);
Transform.mulToOutUnsafe(xf, circle.m_p, center); float radius = circle.m_radius; xf.q.getXAxis(axis); averageLinearVel = .98f * averageLinearVel + .02f * linVelLength; liquidOffset.mulLocal(liquidLength / averageLinearVel / 2); circCenterMoved.set(center).addLocal(liquidOffset); center.subLocal(liquidOffset); Transform.mulToOutUnsafe(xf, poly.m_vertices[i], vertices[i]); case EDGE: { EdgeShape edge = (EdgeShape) fixture.getShape(); Transform.mulToOutUnsafe(xf, edge.m_vertex1, v1); Transform.mulToOutUnsafe(xf, edge.m_vertex2, v2); m_debugDraw.drawSegment(v1, v2, color); Vec2[] vertices = chain.m_vertices; Transform.mulToOutUnsafe(xf, vertices[0], v1); for (int i = 1; i < count; ++i) { Transform.mulToOutUnsafe(xf, vertices[i], v2); m_debugDraw.drawSegment(v1, v2, color); m_debugDraw.drawCircle(v1, 0.05f, color);
m_I = massData.I - m_mass * Vec2.dot(massData.center, massData.center); assert (m_I > 0.0f); m_invI = 1.0f / m_I; oldCenter.set(m_sweep.c); m_sweep.localCenter.set(massData.center); Transform.mulToOutUnsafe(m_xf, m_sweep.localCenter, m_sweep.c0); m_sweep.c.set(m_sweep.c0);
localPointA.set(m_proxyA.getVertex(indexA)); localPointB.set(m_proxyB.getVertex(indexB)); Transform.mulToOutUnsafe(xfa, localPointA, pointA); Transform.mulToOutUnsafe(xfb, localPointB, pointB); float separation = Vec2.dot(pointB.subLocal(pointA), m_axis); Transform.mulToOutUnsafe(xfa, m_localPoint, pointA); Rot.mulTransUnsafe(xfb.q, normal.negateLocal(), axisB); localPointB.set(m_proxyB.getVertex(indexB)); Transform.mulToOutUnsafe(xfb, localPointB, pointB); float separation = Vec2.dot(pointB.subLocal(pointA), normal); return separation; Transform.mulToOutUnsafe(xfb, m_localPoint, pointB); Rot.mulTransUnsafe(xfa.q, normal.negateLocal(), axisA); localPointA.set(m_proxyA.getVertex(indexA)); Transform.mulToOutUnsafe(xfa, localPointA, pointA); float separation = Vec2.dot(pointA.subLocal(pointB), normal);
@Override public void mouseDrag(Vec2 p, int button) { super.mouseDrag(p, button); if (m_drawing) { pshape.m_p.set(p); pshape.m_radius = 2.0f; pxf.setIdentity(); m_world.destroyParticlesInShape(pshape, pxf); ppd.shape = pshape; ppd.color = color; ppd.flags = m_particleFlags; ppd.groupFlags = m_groupFlags; ParticleGroup group = m_world.createParticleGroup(ppd); if (m_lastGroup != null && group.getGroupFlags() == m_lastGroup.getGroupFlags()) { m_world.joinParticleGroups(m_lastGroup, group); } else { m_lastGroup = group; } mouseTracing = false; } }
Vec2 wALocal = proxyA.getVertex(v.indexA); Vec2 wBLocal = proxyB.getVertex(v.indexB); Transform.mulToOutUnsafe(transformA, wALocal, v.wA); Transform.mulToOutUnsafe(transformB, wBLocal, v.wB); v.w.set(v.wB).subLocal(v.wA); v.a = 0.0f; Vec2 wALocal = proxyA.getVertex(0); Vec2 wBLocal = proxyB.getVertex(0); Transform.mulToOutUnsafe(transformA, wALocal, v.wA); Transform.mulToOutUnsafe(transformB, wBLocal, v.wB); v.w.set(v.wB).subLocal(v.wA); m_count = 1;
xf.set(b.getTransform()); for (Fixture f = b.getFixtureList(); f != null; f = f.getNext()) { if (b.isActive() == false) { if (aabb != null) { Vec2[] vs = avs.get(4); vs[0].set(aabb.lowerBound.x, aabb.lowerBound.y); vs[1].set(aabb.upperBound.x, aabb.lowerBound.y); vs[2].set(aabb.upperBound.x, aabb.upperBound.y); vs[3].set(aabb.lowerBound.x, aabb.upperBound.y); m_debugDraw.drawPolygon(vs, 4, color); xf.set(b.getTransform()); xf.p.set(b.getWorldCenter()); m_debugDraw.drawTransform(xf);