From 269662486bfd8c0b9436c081e7c73dc5410c5b2e Mon Sep 17 00:00:00 2001 From: kercylan98 Date: Sun, 25 Jun 2023 12:23:38 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20geometry.Point=20=E6=94=AF=E6=8C=81=20A?= =?UTF-8?q?bs=E3=80=81Min=E3=80=81Max=20=E8=BF=90=E7=AE=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- utils/geometry/geometry.go | 2 +- utils/geometry/position.go | 31 +++++++++++++++++++++++++++++++ 2 files changed, 32 insertions(+), 1 deletion(-) diff --git a/utils/geometry/geometry.go b/utils/geometry/geometry.go index 38d010e..8a125fd 100644 --- a/utils/geometry/geometry.go +++ b/utils/geometry/geometry.go @@ -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) diff --git a/utils/geometry/position.go b/utils/geometry/position.go index 51563b2..2ea8a64 100644 --- a/utils/geometry/position.go +++ b/utils/geometry/position.go @@ -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]{