example/shape: Bug fix: The positions must be rounded (#97)

This commit is contained in:
Hajime Hoshi 2015-01-19 10:15:46 +09:00
parent 73bb576b0e
commit d12477fb2a
2 changed files with 14 additions and 8 deletions

View File

@ -19,7 +19,7 @@ import (
"github.com/hajimehoshi/ebiten/exp/shape" "github.com/hajimehoshi/ebiten/exp/shape"
"image/color" "image/color"
"log" "log"
"math" //"math"
) )
const ( const (
@ -36,8 +36,8 @@ func update(screen *ebiten.Image) error {
screen.DrawLine(130, 0, 140, 100, color.NRGBA{0xff, 0x80, 0x80, 0x80}) screen.DrawLine(130, 0, 140, 100, color.NRGBA{0xff, 0x80, 0x80, 0x80})
screen.DrawLine(140, 0, 150, 100, color.NRGBA{0xff, 0x80, 0x80, 0x80}) screen.DrawLine(140, 0, 150, 100, color.NRGBA{0xff, 0x80, 0x80, 0x80})
shape.DrawEllipse(screen, 0, 0, 100, 50, color.NRGBA{0x80, 0xff, 0x80, 0x80}) shape.DrawEllipse(screen, 0, 0, 200, 200, color.NRGBA{0x80, 0xff, 0x80, 0x80})
shape.DrawArc(screen, 0, 0, 100, 50, 0, math.Pi/2, color.NRGBA{0xff, 0x80, 0x80, 0x80}) //shape.DrawArc(screen, 0, 0, 50, 50, 0, math.Pi/2, color.NRGBA{0xff, 0x80, 0x80, 0x80})
return nil return nil
} }

View File

@ -45,6 +45,10 @@ func (e *ellipsesLines) Len() int {
return e.Rects.Len() * e.lineNum() return e.Rects.Len() * e.lineNum()
} }
func round(x float64) int {
return int(x + 0.5)
}
func (e *ellipsesLines) Points(i int) (x0, y0, x1, y1 int) { func (e *ellipsesLines) Points(i int) (x0, y0, x1, y1 int) {
n := e.lineNum() n := e.lineNum()
x, y, w, h := e.Rects.Rect(i / n) x, y, w, h := e.Rects.Rect(i / n)
@ -59,11 +63,13 @@ func (e *ellipsesLines) Points(i int) (x0, y0, x1, y1 int) {
fy0, fx0 := math.Sincos(theta0) fy0, fx0 := math.Sincos(theta0)
fy1, fx1 := math.Sincos(theta1) fy1, fx1 := math.Sincos(theta1)
hw, hh := (float64(w)-1)/2, (float64(h)-1)/2 hw, hh := (float64(w)-1)/2, (float64(h)-1)/2
fx0 = fx0*hw + float64(x) + hw fx0 = fx0*hw + hw + float64(x)
fx1 = fx1*hw + float64(x) + hw fx1 = fx1*hw + hw + float64(x)
fy0 = fy0*hh + float64(y) + hh fy0 = fy0*hh + hh + float64(y)
fy1 = fy1*hh + float64(y) + hh fy1 = fy1*hh + hh + float64(y)
return int(fx0), int(fy0), int(fx1), int(fy1) // TODO: The last fy1 may differ from first fy0 with very slightly difference,
// which makes the lack of 1 pixel.
return round(fx0), round(fy0), round(fx1), round(fy1)
} }
func (e *ellipsesLines) Color(i int) color.Color { func (e *ellipsesLines) Color(i int) color.Color {