Code archives/Graphics/ARC

This code has been declared by its author to be Public Domain code.

Download source code

ARC by Jesse2009
draws an arc, a pie piece or a circle segment by plotting pixels as efficiently as possible. The arc is draw clockwise from starting angle to ending angle up to the maximum of 360 degrees. If the starting angle is greater the the ending angle, the angles are swapped.
SuperStrict
Function arc(x:Float, y:Float, startAngle:Float, endAngle:Float, radius:Float,closed:Int = False,pie:Int = False)
	Local fx:Float,fy:Float 'first x,y
	Local lx:Float,ly:Float 'last x,y
	Const RATE:Float = Pi/180.0
	If startAngle = endAngle Then Return
	If startAngle > endAngle
		Local ta:Float = endAngle
		endAngle = startAngle
		startAngle = ta
	EndIf
	Local angle:Float = endAngle - StartAngle
	If angle > 360.0 angle = 360.0
	
	Local Stp:Float = 1/(RATE * radius)
	Local AccumAngle:Float = StartAngle
	If closed = True
		fx = Cos(accumAngle) * radius
		fy = Sin(accumAngle) * radius
	EndIf
	While accumAngle < (StartAngle+Angle)
					
			lx:Float = Cos((accumAngle)) * radius
			ly:Float = Sin((accumAngle)) * radius
			Plot x + lx, y + ly
			AccumAngle :+ stp
	Wend

	If closed = True
		If pie = True
			DrawLine x, y, x + fx, y + fy,False
			DrawLine x, y, x + lx, y + ly,False
		Else
			DrawLine x+fx,y+fy,x+lx,y+ly,False
		EndIf
	EndIf
End Function 


Graphics 800,600

Repeat
	Cls
	arc(400,300,0,90,200,True,True)
	arc(380,280,90,360,200,True,True)
	Flip
Until KeyDown(key_escape)

Comments

TAS2016
Thanks!


Code Archives Forum