feat: geometry.Point 支持 Abs、Min、Max 运算

This commit is contained in:
kercylan98 2023-06-25 12:23:38 +08:00
parent 0481194f74
commit 269662486b
2 changed files with 32 additions and 1 deletions

View File

@ -146,7 +146,7 @@ func CalcNewCoordinate[V generic.SignedNumber](x, y, angle, distance V) (newX, n
}
// CalcAngleDifference 计算两个角度之间的最小角度差
func CalcAngleDifference[V generic.Number](angleA, angleB V) V {
func CalcAngleDifference[V generic.SignedNumber](angleA, angleB V) V {
pi := math.Pi
t := angleA - angleB
a := t + V(pi)

View File

@ -79,6 +79,37 @@ func (slf Point[V]) Div(point Point[V]) Point[V] {
return NewPoint(slf.GetX()/point.GetX(), slf.GetY()/point.GetY())
}
// Abs 返回位置的绝对值
func (slf Point[V]) Abs() Point[V] {
return NewPoint(V(math.Abs(float64(slf.GetX()))), V(math.Abs(float64(slf.GetY()))))
}
// Max 返回两个位置中每个维度的最大值组成的新的位置
func (slf Point[V]) Max(point Point[V]) Point[V] {
x, y := slf.GetXY()
px, py := point.GetXY()
if px > x {
x = px
}
if py > y {
y = py
}
return NewPoint(x, y)
}
// Max 返回两个位置中每个维度的最小值组成的新的位置
func (slf Point[V]) Min(point Point[V]) Point[V] {
x, y := slf.GetXY()
px, py := point.GetXY()
if px < x {
x = px
}
if py < y {
y = py
}
return NewPoint(x, y)
}
// NewPointCap 创建一个由 x、y 坐标组成的点,这个点具有一个数据容量
func NewPointCap[V generic.SignedNumber, D any](x, y V) PointCap[V, D] {
return PointCap[V, D]{