本人遇到一个难题。在看简单的一个图形操作系统 源代码时,删除直线的算法就是看不懂!希望那位 大侠帮哈我。删除直线的操作就是单击“删除”——“直线”,然后鼠标单击要删除的直线中央附近,系统将删除这条直线。
//*下面就是删除直线的方法*/
public void deleteline(int x,int y//x.y分别是鼠标在删除直线时候获得的鼠标位置
{
 double length=100000;
 cshape temp=this.head;//cshape是所有图形的父类(内容是所有图形 的共同属性 color,int type(图形类型)还有一个就是cshape的一个对象next主要是为了表示下一个图形)。
 head 为所有图形的头接点
 cshape delt=null;
 while(temp!=null)
   {
     if(temp.type!=1){temp=temp.next;contine;}
     cline cp=(cline)temp;//cline为直线
     int xx=(cp.sx+cp.ey)/2;//sx和 sy,ex和ey分别是直线构造函数的参数都用来修改图形类型的它们,的方法是resetsx(int sx),resetsy(int sy),resetex(int ex)和resetey(int ey)
     主要是为了在改变图形的时候用的。
     int yy=(cp.sy+cp.ey)/2;
     double len=Math.sqrt((xx-x)*(xx-x)+(yy-y)(yy-y));
     if(length>len)
       {
         length=len;
         delt=temp;
       }
    temp=temp.next;
   }
    if(delt==null)reture;
    temp=this.head;
    if(temp.equals(delt)) this.head=this.head.next;
     else{
           while(temp!=null&&temp.next!&&(!temp.next.equals(delt)))
             {
              temp=temp.next;
             }
          temp.next=delt.next;}
        }
}

解决方案 »

  1.   

    貌似就是一个链表的删除中间的一个节点。
    不过cline的那些属性sy,ey,sx,ex各表示什么意思呢?
      

  2.   

    length=100000鼠标至少要离直线中点在100000px以内
    this.head的this是个图形链表,包括一组clineint xx=(cp.sx+cp.ey)/2;
    int yy=(cp.sy+cp.ey)/2;
    分别获得当前结点(直线)的中点double len=Math.sqrt((xx-x)*(xx-x)+(yy-y)(yy-y));
    获取鼠标到直线中点的距离整个循环语句里面就是遍历所有直线
    找到离当前鼠标最近的那条,保存到delt里面如果delt为空,说明没有要删除的直线,返回
    否则删除该直线
      

  3.   

    sy,sx,ey,ex应该是表示一条直线的起始和终点坐标