draw2d/curve/arc.go

37 lines
712 B
Go
Raw Permalink Normal View History

2011-05-19 21:54:22 +00:00
// Copyright 2010 The draw2d Authors. All rights reserved.
// created: 21/11/2010 by Laurent Le Goff
2015-01-07 14:35:09 +00:00
package curve
2011-05-19 21:54:22 +00:00
import (
"math"
)
func SegmentArc(t LineTracer, x, y, rx, ry, start, angle, scale float64) {
end := start + angle
clockWise := true
if angle < 0 {
clockWise = false
}
2012-01-13 09:14:12 +00:00
ra := (math.Abs(rx) + math.Abs(ry)) / 2
2011-05-19 21:54:22 +00:00
da := math.Acos(ra/(ra+0.125/scale)) * 2
//normalize
if !clockWise {
da = -da
}
angle = start + da
var curX, curY float64
for {
if (angle < end-da/4) != clockWise {
curX = x + math.Cos(end)*rx
curY = y + math.Sin(end)*ry
2015-04-16 09:51:13 +00:00
break
2011-05-19 21:54:22 +00:00
}
curX = x + math.Cos(angle)*rx
curY = y + math.Sin(angle)*ry
angle += da
t.LineTo(curX, curY)
}
t.LineTo(curX, curY)
}