draw2d/draw2d/curve/arc.go

38 lines
774 B
Go
Raw 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
package draw2d
import (
2012-01-13 09:14:12 +00:00
"code.google.com/p/freetype-go/freetype/raster"
2011-05-19 21:54:22 +00:00
"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
return curX, curY
}
curX = x + math.Cos(angle)*rx
curY = y + math.Sin(angle)*ry
angle += da
t.LineTo(curX, curY)
}
t.LineTo(curX, curY)
}