使用 AddArc 创建一个 "pie element" with RasterX 包
Create a "pie element" with RasterX package using AddArc
我正在为 Fyne 开发图表小部件,我使用 rasterx
程序包 (https://github.com/srwiley/rasterx),它运行良好。但是我花了几个小时尝试制作圆弧(创建饼图元素)但没有成功。
让我们以此为出发点:
cx, cy := float64(w/2.0), float64(h/2.0)
r := float64(w / 3.0)
angle := 45.0
rot := angle * math.Pi / 180.0
我拿https://github.com/srwiley/rasterx/blob/master/shapes.go#L99处的AddArc
函数来理解原理,做:
points := []float64{r, r, angle, 1, 0, px, py}
stroker.Start(rasterx.ToFixedP(px, py))
rasterx.AddArc(points, cx, cy, px, py, stroker)
stroker.Stop(false)
stroker.Draw()
结果是圆,不是圆弧。
由于 rasterx
包是基于 SVG 2.0 规范的,所以我可能漏掉了什么。你能帮我看看如何为给定角度创建“饼图元素”吗?
非常感谢。
PS: 除了rasterx
,我不应该使用其他包,请不要告诉我使用其他包。
这只是一个猜测,但 AddArc
不想要弧度角而不是度数吗?
points
中的 px、py 需要与传递给 AddArc
的不同。这对我有用:
angle := 45.0
rot1 := angle * math.Pi / 180.0
rot2 := (angle - 90) * math.Pi / 180.0
p1x := cx + r*math.Cos(rot1)
p1y := cy + r*math.Sin(rot1)
p2x := cx + r*math.Cos(rot2)
p2y := cy + r*math.Sin(rot2)
points := []float64{r, r, angle, 1, 0, p2x, p2y}
...
stroker.Start(rasterx.ToFixedP(p1x, p1y))
rasterx.AddArc(points, cx, cy, p1x, p1y, stroker)
我正在为 Fyne 开发图表小部件,我使用 rasterx
程序包 (https://github.com/srwiley/rasterx),它运行良好。但是我花了几个小时尝试制作圆弧(创建饼图元素)但没有成功。
让我们以此为出发点:
cx, cy := float64(w/2.0), float64(h/2.0)
r := float64(w / 3.0)
angle := 45.0
rot := angle * math.Pi / 180.0
我拿https://github.com/srwiley/rasterx/blob/master/shapes.go#L99处的AddArc
函数来理解原理,做:
points := []float64{r, r, angle, 1, 0, px, py}
stroker.Start(rasterx.ToFixedP(px, py))
rasterx.AddArc(points, cx, cy, px, py, stroker)
stroker.Stop(false)
stroker.Draw()
结果是圆,不是圆弧。
由于 rasterx
包是基于 SVG 2.0 规范的,所以我可能漏掉了什么。你能帮我看看如何为给定角度创建“饼图元素”吗?
非常感谢。
PS: 除了rasterx
,我不应该使用其他包,请不要告诉我使用其他包。
这只是一个猜测,但 AddArc
不想要弧度角而不是度数吗?
points
中的 px、py 需要与传递给 AddArc
的不同。这对我有用:
angle := 45.0
rot1 := angle * math.Pi / 180.0
rot2 := (angle - 90) * math.Pi / 180.0
p1x := cx + r*math.Cos(rot1)
p1y := cy + r*math.Sin(rot1)
p2x := cx + r*math.Cos(rot2)
p2y := cy + r*math.Sin(rot2)
points := []float64{r, r, angle, 1, 0, p2x, p2y}
...
stroker.Start(rasterx.ToFixedP(p1x, p1y))
rasterx.AddArc(points, cx, cy, p1x, p1y, stroker)