2016-08-26 09:08:30 -07:00
|
|
|
package rect
|
|
|
|
|
2016-08-26 11:37:18 -07:00
|
|
|
import "math"
|
|
|
|
|
2016-08-26 09:08:30 -07:00
|
|
|
type Point struct {
|
|
|
|
X, Y float64
|
|
|
|
}
|
2016-08-26 11:37:18 -07:00
|
|
|
|
2016-08-26 16:26:59 -07:00
|
|
|
type line struct {
|
|
|
|
pt1, pt2 Point
|
|
|
|
}
|
|
|
|
|
2016-08-26 11:37:18 -07:00
|
|
|
func distance(p1, p2 Point) float64 {
|
|
|
|
return math.Sqrt(math.Pow((p1.X-p2.X), 2) + math.Pow((p1.Y-p2.Y), 2))
|
|
|
|
}
|
2016-08-26 16:26:59 -07:00
|
|
|
|
|
|
|
func onLine(rp1, rp2, p Point) bool {
|
|
|
|
if distance(rp1, p)+distance(rp2, p) == distance(rp1, rp2) {
|
|
|
|
minx, maxx := math.Min(rp1.X, rp2.X), math.Max(rp1.X, rp2.X)
|
|
|
|
miny, maxy := math.Min(rp1.Y, rp2.Y), math.Max(rp1.Y, rp2.Y)
|
|
|
|
if minx <= p.X && p.X <= maxx && miny <= p.Y && p.Y <= maxy {
|
|
|
|
return true
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return false
|
|
|
|
}
|
|
|
|
|
|
|
|
func lineOnLine(l1, l2 line) bool {
|
|
|
|
if onLine(l1.pt1, l1.pt2, l2.pt1) && onLine(l1.pt1, l1.pt2, l2.pt2) {
|
|
|
|
return true
|
|
|
|
}
|
|
|
|
return false
|
|
|
|
}
|