Exemplo n.º 1
0
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)}
}