func TrueCentroid(a, b, c Point) interface{} { angleA := b.Angle(c.Vector).Radians() angleB := c.Angle(a.Vector).Radians() angleC := a.Angle(b.Vector).Radians() ra, rb, rc := 1., 1., 1. if angleA != 0 { ra = angleA / math.Sin(angleA) } if angleB != 0 { rb = angleB / math.Sin(angleB) } if angleC != 0 { rc = angleC / math.Sin(angleC) } x := r3.Vector{a.X, b.X - a.X, c.X - a.X} y := r3.Vector{a.Y, b.Y - a.Y, c.Y - a.Y} z := r3.Vector{a.Z, b.Z - a.Z, c.Z - a.Z} r := r3.Vector{ra, rb - ra, rc - ra} v := r3.Vector{ y.Cross(z).Dot(r), z.Cross(x).Dot(r), x.Cross(y).Dot(r), } return Point{v.Mul(0.5)} }