func (arb *Arbiter) preStep2(inv_dt, slop, bias float32) { a := arb.ShapeA.Body b := arb.ShapeB.Body for i := 0; i < arb.NumContacts; i++ { con := arb.Contacts[i] // Calculate the offsets. con.r1 = vect.Sub(con.p, a.p) con.r2 = vect.Sub(con.p, b.p) //con.Normal = vect.Vect{-1,0} // Calculate the mass normal and mass tangent. con.nMass = 1.0 / k_scalar(a, b, con.r1, con.r2, con.n) con.tMass = 1.0 / k_scalar(a, b, con.r1, con.r2, vect.Perp(con.n)) // Calculate the target bias velocity. con.bias = -bias * inv_dt * vect.FMin(0.0, con.dist+slop) con.jBias = 0.0 //con.jtAcc = 0 //con.jnAcc = 0 //fmt.Println("con.dist", con.dist) // Calculate the target bounce velocity. con.bounce = normal_relative_velocity(a, b, con.r1, con.r2, con.n) * arb.e } }
func (poly *PolygonShape) valueOnAxis(n vect.Vect, d float32) float32 { verts := poly.TVerts min := vect.Dot(n, verts[0]) for i := 1; i < poly.NumVerts; i++ { min = vect.FMin(min, vect.Dot(n, verts[i])) } //fmt.Println(min, d) return min - d }
func MergedAreaPtr(a, b *AABB) float32 { return (vect.FMax(a.Upper.X, b.Upper.X) - vect.FMin(a.Lower.X, b.Lower.X)) * (vect.FMax(a.Upper.Y, b.Upper.Y) - vect.FMin(a.Lower.Y, b.Lower.Y)) }
func segValueOnAxis(seg *SegmentShape, n vect.Vect, d float32) float32 { a := vect.Dot(n, seg.Ta) - seg.Radius b := vect.Dot(n, seg.Tb) - seg.Radius return vect.FMin(a, b) - d }