this is my first bit of Lua code so excuse me if my approach isn’t the best
http://www.mediafire.com/?cr8pddi14o6adwt
i don’t think you can really achieve fills this way, and I dont know if the lines will get antialiased on the device… (really we need beginFill, curveTo and beginBitmapFill etc) but anyway…
please let me know if my use of local functions/variables etc can be improved, as this is all new to me!
local RGB = require("RGB")
local MathFunc = require("MathFunc")
--
local deg2rad = MathFunc.deg2rad
local rad2deg = MathFunc.rad2deg
--
local function getArcEndPoints(centerX, centerY, radius, startAngle, arcAngle)
-- start 0 deg from 12 o'clock
local startAngle = startAngle - deg2rad(90)
local xx = centerX + math.cos(startAngle) \* radius
local yy = centerY + math.sin(startAngle) \* radius
local startPoint = {x=xx,y=yy}
xx = centerX + math.cos(startAngle+arcAngle) \* radius
yy = centerY + math.sin(startAngle+arcAngle) \* radius
local endPoint = {x=xx,y=yy}
return {startPoint = startPoint, endPoint = endPoint}
end
--
local function drawArc(segment, centerX, centerY, radius, startAngle, arcAngle, steps)
local startPoint
local endPoint
-- start 0 deg from 12 o'clock
local startAngle = startAngle - deg2rad(90)
local angleStep = arcAngle / steps
local xx = centerX + math.cos(startAngle) \* radius
local yy = centerY + math.sin(startAngle) \* radius
startPoint = {x=xx,y=yy}
local angle
for i=1, steps, 1 do
angle = startAngle + i \* angleStep
xx = centerX + math.cos(angle) \* radius
yy = centerY + math.sin(angle) \* radius
segment:append(xx,yy)
end
return coords
end
--
local function drawSegment(centerX, centerY, radius, startAngle, arcAngle, steps, lineColor)
local p = getArcEndPoints(centerX, centerY, radius, startAngle, arcAngle)
local startPoint=p.startPoint
local endPoint=p.endPoint
local segment = display.newLine(centerX, centerY, startPoint.x, startPoint.y)
drawArc(segment, centerX, centerY, radius, startAngle, arcAngle, steps)
segment:append(centerX,centerY)
segment:setColor(RGB.red(lineColor),RGB.green(lineColor),RGB.blue(lineColor),255)
segment.width=2
return segment
end
-- ### MAIN APP ###
local centerX, centerY, radius, steps
centerX=160
centerY=240
radius=120
steps = 100
local segments = {}
segments[1] = drawSegment(centerX,centerY,radius,0,deg2rad(90),steps,0xFF0000)
segments[2] = drawSegment(centerX,centerY,radius,deg2rad(90),deg2rad(90),steps,0x00FF00)
segments[3] = drawSegment(centerX,centerY,radius,deg2rad(180),deg2rad(30),steps,0x0000FF)
segments[4] = drawSegment(centerX,centerY,radius,deg2rad(210),deg2rad(70),steps,0xFFFF00)
segments[5] = drawSegment(centerX,centerY,radius,deg2rad(280),deg2rad(80),steps,0xFF00FF)
segments[1].xScale=0.8
segments[1].yScale=0.8
segments[4].xScale=1.1
segments[4].yScale=1.1
[import]uid: 6645 topic_id: 3332 reply_id: 10054[/import]