...
This commit is contained in:
parent
cdd854cec4
commit
6fdc733f5c
3 changed files with 82 additions and 64 deletions
|
@ -6,69 +6,16 @@ import (
|
|||
)
|
||||
|
||||
func main() {
|
||||
lines := []gx.Line{
|
||||
gx.LineSegment{
|
||||
gx.Point{0, 1},
|
||||
gx.Point{1, 2},
|
||||
}.Line(),
|
||||
gx.LineSegment{
|
||||
gx.Point{0, 5},
|
||||
gx.Point{1, 2},
|
||||
}.Line(),
|
||||
gx.LineSegment{
|
||||
gx.Point{-1, -1},
|
||||
gx.Point{1, 50},
|
||||
}.Line(),
|
||||
}
|
||||
|
||||
|
||||
for _, l := range lines { fmt.Println(l) }
|
||||
|
||||
l1 := gx.LineSegment{
|
||||
gx.Point{0, 0},
|
||||
gx.Point{1, 1},
|
||||
}.Line()
|
||||
|
||||
l2 := gx.LineSegment{
|
||||
gx.Point{0, 1},
|
||||
gx.Point{1, 0},
|
||||
}.Line()
|
||||
|
||||
fmt.Println(gx.LinersCross(l1, l2))
|
||||
fmt.Println(l1.ContainsPoint(gx.Point{1, 4}))
|
||||
angle := gx.LinersAngle(l1, l2)
|
||||
fmt.Println("angle:", angle, gx.RadiansToDegrees(angle))
|
||||
|
||||
|
||||
t := gx.Rectangle{
|
||||
Transform: gx.Transform{
|
||||
S: gx.Vector{100, 200},
|
||||
P: gx.Point{0, 200},
|
||||
RA: gx.Point{0, 0},
|
||||
R: 0,
|
||||
},
|
||||
}
|
||||
|
||||
points := []gx.Point{
|
||||
gx.Point{},
|
||||
gx.Point{100, 0},
|
||||
gx.Point{0, 99},
|
||||
gx.Point{.1, .1},
|
||||
gx.Point{-1, -1},
|
||||
gx.Point{1, 1},
|
||||
gx.Point{101, 1},
|
||||
gx.Point{100, 1},
|
||||
gx.Point{50, 1},
|
||||
}
|
||||
|
||||
ts := t.Triangles()
|
||||
t1 := ts[0]
|
||||
t2 := ts[1]
|
||||
fmt.Printf("Rectangle triangles:\n\t%v\n\t%v\n", t1, t2)
|
||||
for _, p := range points {
|
||||
fmt.Println(p, t.ContainsPoint(p))
|
||||
p := gx.Polygon{
|
||||
gx.Vertex{0, 0},
|
||||
gx.Vertex{0, 50},
|
||||
gx.Vertex{25, 50},
|
||||
gx.Vertex{30, 40},
|
||||
gx.Vertex{40, 30},
|
||||
}
|
||||
|
||||
fmt.Println("barycenter:", p.Barycenter())
|
||||
fmt.Println("edges:", p.Edges())
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -5,12 +5,79 @@ package gx
|
|||
// Should split it somehow.
|
||||
type Polygon []Point
|
||||
|
||||
// Returns slice of edges.
|
||||
func (p Polygon) Edges() Edges {
|
||||
ret := Edges{}
|
||||
/*for i := range p {
|
||||
ret = append(ret, Edge{})
|
||||
}*/
|
||||
|
||||
l := p.Len()
|
||||
for i := range p {
|
||||
ret = append(ret, Edge{p[i], p[(i+1)%l]})
|
||||
}
|
||||
|
||||
return ret
|
||||
}
|
||||
|
||||
func (p Polygon) Len() int {
|
||||
return len(p)
|
||||
}
|
||||
|
||||
func (p Polygon) Vertices() []Vertex {
|
||||
return p
|
||||
}
|
||||
|
||||
func (p Polygon) Barycenter() Point {
|
||||
ret := Point{}
|
||||
for _, v := range p {
|
||||
ret.X += v.X
|
||||
ret.Y += v.Y
|
||||
}
|
||||
|
||||
l := Float(len(p))
|
||||
ret.X /= l
|
||||
ret.Y /= l
|
||||
|
||||
return ret
|
||||
}
|
||||
|
||||
/*
|
||||
func (p Polygon) anyPointInside() Point {
|
||||
edges := p.Edges()
|
||||
for _, e := range edges {
|
||||
if
|
||||
}
|
||||
}
|
||||
*/
|
||||
|
||||
func (p Polygon) Triangles() Triangles {
|
||||
/*
|
||||
if len(p) < 3 {
|
||||
return Triangles{}
|
||||
} else
|
||||
vertices = p.Vertices()
|
||||
ret := Triangles{}
|
||||
|
||||
i := 0
|
||||
for len(vertices) != 3{
|
||||
|
||||
i1 = i % len(vertices)
|
||||
i2 = (i+1) % len(vertices)
|
||||
i3 = (i+2) % len(vertices)
|
||||
|
||||
l1 = LineSegment{vertices[i1], vertices[i2]}.Line()
|
||||
l2 = LineSegment{vertices[i1], vertices[i3]}.Line()
|
||||
|
||||
if l1.K > 0 {
|
||||
if l1.K
|
||||
} else {
|
||||
}
|
||||
}
|
||||
|
||||
return append(
|
||||
ret,
|
||||
Triangle{p[0], p[1], p[2]},
|
||||
)
|
||||
*/
|
||||
|
||||
return Triangles{}
|
||||
}
|
||||
|
||||
|
|
|
@ -22,6 +22,10 @@ func V(x, y Float) Vector {
|
|||
return Vector{x, y}
|
||||
}
|
||||
|
||||
func (v Vector) Eq(o Vector) bool {
|
||||
return v.X == o.X && v.Y == o.Y
|
||||
}
|
||||
|
||||
// Returns the vector with the matrix applied
|
||||
func (v Vector) Apply(m *Matrix) Vector {
|
||||
x, y := m.Apply(v.X, v.Y)
|
||||
|
|
Loading…
Reference in a new issue