【问题标题】:Filling triangles without fillpolygon?填充没有填充多边形的三角形?
【发布时间】:2014-01-01 14:30:36
【问题描述】:

所以我编写了一个可以编译的程序,但它不会做我想要它做的事情。它应该在不使用填充多边形的情况下填充三角形。我试图将代码限制在循环中。

重点是让三条线越来越小,填满三角形的每一部分。 解决这个问题的方法是,我认为应该找出循环应该在哪里停止。我猜测了三角形高度的一半(140)。

import javax.swing.*;
import java.awt.*;

public class Tri extends JApplet
  {

      int x1=0;
      int y1 = 140;
      int x2 = 120;
      int y2 = 140;
      int x3 = 60;
      int y3;


               public void paint (Graphics page)
               {
                  for (y3= 0; y3<=70; y3++)   
                  {
                  page.drawLine (x1, y1, x2, y2); 
                  page.drawLine (x2, y2, x3, y3);
                  page.drawLine (x3, y3, x1, y1); 


                  y1++;
                  x2--;
                  y2--;
                  x1++;
                  }


               }

   }

【问题讨论】:

  • 1) 请不要忘记添加“?”提问!有些人在页面中搜索“?”如果“问题”中不存在,则直接转到下一个(实际)问题。 2) 为什么要编写小程序?如果是由于规范。老师请发给Why CS teachers should stop teaching Java applets
  • 这不是填充形状的方法。实现一个 flood fill algorithm
  • 不要在绘画方法中调用 repaint()。这将导致无限循环。

标签: java swing awt paint java-2d


【解决方案1】:

改变你的循环逻辑,试试下面的代码

int x1=0;
  int y1 = 140;
  int x2 = 120;
  int y2 = 140;
  int x3 = 60;
  int y3=0;


           public void paint (Graphics page)
           {
              page.drawLine (x1, y1, x2, y2); 
              page.drawLine (x2, y2, x3, y3);
              page.drawLine (x3, y3, x1, y1); 

              for (x1= 0; x1<=120; x1++)     

           {

              page.drawLine (x3, y3, x1, y1);


           }   }

保持两条线不变,并通过改变其坐标来改变另一条线的位置

有关paint() 和重绘的信息,请点击链接

paint() and repaint() in Java `

【讨论】:

  • 你是说我应该一遍又一遍地画一条线?
  • 是的,首先如果您使用坐标(0,140)(60,0)绘制网络,则使用(1,140)(60,0)等等直到它到达下一行,即(120,140)( 60,0)
  • 感谢重绘链接。这个网站很有帮助。