2013-12-19 283 views
1

我目前正在尝试为圆形实现绘制方法,但是我的唯一工具是从多个点绘制线条(特定于此示例,我有一个“笔”,可以移动到,然后从该位置画到新位置上的网格。)在java中使用线绘制圆形

这是我当前的代码

public void draw(WinPlotter plotter){ 
     setPenColor(plotter); 
     plotter.moveTo(xo,yo); //xo,yo being original X and Y cords (origin) 
     for (int i = 0; i > 360; i++){ 
      double x = Math.sin(i) * radius; 
      double y = Math.cos(i) * radius; 

      plotter.drawTo(x,y); 
     } 
    } 

我不知道我错过了什么,但其实这不会输出任何东西总之,我已经测试过确保xo和yo被正确地传递给方法,所以我相信我的问题在于我试图从线条画出一个圆的逻辑。

编辑:

public void draw(WinPlotter plotter){ 
     setPenColor(plotter); 
     plotter.moveTo(xo,yo+radius); 
     for (int i = 0; i <= 360; i++){ 
      double x = xo+ Math.sin(i * (Math.PI/180)) * radius; 
      double y = yo+ Math.cos(i) * radius; 

      plotter.drawTo(x,y); 
     } 
    } 

这是我固定的代码。仍然没有建立社交圈,而不是创建这个(圆圈应该是在顶部)

enter image description here

回答

4

问题1:弧度sin()cos()期待的投入,而不是度。要获得弧度,请将i乘以Math.PI/180

问题2:你的循环中的条件是落后的;你想要i < 360,而不是i > 360。如果您想关闭该圈子,请改用i <= 360

问题3:您不会将xoyo添加到计算出的x/y坐标中,因此您正在绘制除(0,0)原点上的第一个点之外的所有圆。

问题4:您的初始moveTo()将转到圆的中心,而不是0度圆上的点。

+0

我试过这个,并用更新编辑了我原来的问题。你能看看吗? – user3120910

+0

@ user3120910您修正了'sin()'调用,但不修改'cos()'调用;你将弧度投给一个和另一个度。 – TypeIA

+0

好吧,这是我愚蠢的哈哈谢谢。我想我对整个方法感到很慌乱,所以我并没有批判性地思考。再次感谢 – user3120910