rem Rounded triangles thing V2 (no circle command), by Jim Shaw 7/8/2002

open window 640,512
repeat
	setrgb 1,ran(255),ran(255),ran(255)
	rounded_tri(ran(640),ran(512),ran(640),ran(512),ran(640),ran(512),int(ran(10))+1)
until (peek("port1")<>0)
end

sub rounded_tri(x0,y0,x1,y1,x2,y2,r)
	local t,dx,dy,a

'	fill circle x0,y0,r
'	fill circle x1,y1,r
'	fill circle x2,y2,r

	docircle(x0,y0,r)
	docircle(x1,y1,r)
	docircle(x2,y2,r)

	fill triangle x0,y0 to x1,y1 to x2,y2

	if (((x1-x0)*(y2-y0) - (x2-x0)*(y1-y0)) < 0) then
		t = x1
		x1 = x2
		x2 = t
		t = y1
		y1 = y2
		y2 = t
	fi

	a = -atan(x1-x0,y1-y0)
	dx =r*cos(a)
	dy =r*sin(a)
	fill triangle x0,y0 to x0+dx,y0+dy to x1,y1
	fill triangle x0+dx,y0+dy to x1,y1 to x1+dx,y1+dy

	a = -atan(x2-x1,y2-y1)
	dx =r*cos(a)
	dy =r*sin(a)
	fill triangle x1,y1 to x1+dx,y1+dy to x2,y2
	fill triangle x1+dx,y1+dy to x2,y2 to x2+dx,y2+dy

	a = -atan(x0-x2,y0-y2)
	dx =r*cos(a)
	dy =r*sin(a)
	fill triangle x2,y2 to x2+dx,y2+dy to x0,y0
	fill triangle x2+dx,y2+dy to x0,y0 to x0+dx,y0+dy
end sub

sub docircle(x,y,r)
local ox,oy,nx,ny,z
	ox = r
	oy = 0
	for z = 1 to 8
		nx = r*cos(z/8*2*3.14159)
		ny = r*sin(z/8*2*3.14159)
		fill triangle x,y to x+ox,y+oy to x+nx,y+ny
		ox = nx
		oy = ny
	next z
end sub
 
