github.com/pavlo67/common@v0.5.3/common/mathlib/plane/shapes.go (about)

     1  package plane
     2  
     3  import "math"
     4  
     5  func Center(points ...Point2) Point2 {
     6  	if len(points) < 1 {
     7  		return Point2{math.NaN(), math.NaN()}
     8  	}
     9  	var x, y float64
    10  	for _, element := range points {
    11  		x += element.X
    12  		y += element.Y
    13  	}
    14  
    15  	n := float64(len(points))
    16  
    17  	return Point2{X: x / n, Y: y / n}
    18  }
    19  
    20  func TriangleArea(p0, p1, p2 Point2) float64 {
    21  	a, b, c := p0.DistanceTo(p1), p1.DistanceTo(p2), p2.DistanceTo(p0)
    22  
    23  	//log.Printf("p0 (%v), p1 (%v), p2 (%v) --> a (%f), b (%f), c (%f)", p0, p1, p2, a, b, c)
    24  
    25  	p := (a + b + c) / 2
    26  
    27  	return math.Sqrt(p * (p - a) * (p - b) * (p - c))
    28  }