Pessoal, estou tentanto transformar o algoritmo do nosso amigo Bresenham pra desenhar um arc ao invéz de um círculo, alguém poderia me ajudar?
import java.awt.*;
class MeuCanvas extends Canvas
{
private Graphics g;
private void putpixel (int x, int y, int r, int ai, int af )
{
float xai, yai, xaf, yaf, cosx, siny;
xai = Math.round(Math.cos(Math.toRadians(ai)));
yai = Math.round(Math.sin(Math.toRadians(ai)));
xaf = Math.round(Math.cos(Math.toRadians(af)));
yaf = Math.round(Math.sin(Math.toRadians(af)));
cosx = ((float)(x-100)/r);
siny = ((float)(y-100)/r);
//System.out.println(xai);
//System.out.println(yai);
//System.out.println(xaf);
//System.out.println(yaf);
//System.out.println((float)siny);
//o comando g.drawLine(x,y,x,y) é o que vai fazer o ponto
//a idéia é compara o coseno do X e Y com o coseno do angulo inicial (ai)
//aki é que o problema acontece, tem que desenvolver uma condição pro saber o ângulo
if(siny>=0)
if(cosx<=xai)
g.drawLine(x,y,x,y);
if(siny<=0)
if(cosx<xai)
g.drawLine(x,y,x,y);
}
private void plotcircle ( int x, int y, int x1, int y1, int r, int ai, int af )
{
putpixel ( x + x1, y + y1, r, ai, af ) ;
putpixel ( x - x1, y + y1, r, ai, af ) ;
putpixel ( x + x1, y - y1, r, ai, af ) ;
putpixel ( x - x1, y - y1, r, ai, af ) ;
putpixel ( x + y1, y + x1, r, ai, af ) ;
putpixel ( x - y1, y + x1, r, ai, af ) ;
putpixel ( x + y1, y - x1, r, ai, af ) ;
putpixel ( x - y1, y - x1, r, ai, af ) ;
try
{
Thread.sleep(10);
}
catch(InterruptedException e)
{
}
}
private void desenhaCirculo(int x, int y, int r, int ai, int af)
{
int i, x1, y1, p ;
double xai, yai, xaf, yaf;
x1 = 0 ;
y1 = r ;
p = 3 - 2 * r ;
while ( x1 < y1 )
{
plotcircle ( x, y, x1, y1, r, ai, af ) ;
if ( p < 0 )
p = p + 4 * x1 + 6 ;
else
{
p = p + 4 * ( x1 - y1 ) + 10 ;
y1 = y1 - 1 ;
}
x1 = x1 + 1 ;
}
if ( x1 == y1 )
plotcircle ( x, y, x1, y1, r, ai, af ) ;
xai = x + (Math.cos(Math.toRadians(ai))*r);
yai = y + (Math.sin(Math.toRadians(ai))*r);
xaf = x + (Math.cos(Math.toRadians(af))*r);
yaf = y + (Math.sin(Math.toRadians(af))*r);
System.out.println(Math.cos(Math.toRadians(ai)));
System.out.println(xai);
System.out.println(yai);
//Aki vai gerar as linhas, só pra ter como base o inicial e o final
g.drawLine(x,y,Math.round(Math.round(xai)),Math.round(Math.round(yai)));
g.drawLine(x,y,Math.round(Math.round(xaf)),Math.round(Math.round(yaf)));
}
public void paint(Graphics g)
{
this.g=g;
//aki vc muda o X central, Y central, RAIO, GRAU INICIAL, GRAU FINAL
desenhaCirculo(100,100,75,90,0);
}
}
public class Circulo extends Frame
{
public static void main(String a[])
{
Frame f= new Circulo();
f.add(new MeuCanvas());
f.setSize(300,300);
f.setVisible(true);
}
}