...
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() {
|
func main() {
|
||||||
lines := []gx.Line{
|
p := gx.Polygon{
|
||||||
gx.LineSegment{
|
gx.Vertex{0, 0},
|
||||||
gx.Point{0, 1},
|
gx.Vertex{0, 50},
|
||||||
gx.Point{1, 2},
|
gx.Vertex{25, 50},
|
||||||
}.Line(),
|
gx.Vertex{30, 40},
|
||||||
gx.LineSegment{
|
gx.Vertex{40, 30},
|
||||||
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))
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fmt.Println("barycenter:", p.Barycenter())
|
||||||
|
fmt.Println("edges:", p.Edges())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -5,12 +5,79 @@ package gx
|
||||||
// Should split it somehow.
|
// Should split it somehow.
|
||||||
type Polygon []Point
|
type Polygon []Point
|
||||||
|
|
||||||
|
// Returns slice of edges.
|
||||||
func (p Polygon) Edges() Edges {
|
func (p Polygon) Edges() Edges {
|
||||||
ret := 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
|
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}
|
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
|
// Returns the vector with the matrix applied
|
||||||
func (v Vector) Apply(m *Matrix) Vector {
|
func (v Vector) Apply(m *Matrix) Vector {
|
||||||
x, y := m.Apply(v.X, v.Y)
|
x, y := m.Apply(v.X, v.Y)
|
||||||
|
|
Loading…
Reference in a new issue