如何在一个已知矩形中画一系列的间距相等的平行线(平行线不能超过边界)(类似于填充)
已知条件 : 只知道那些平行线中的一条,(该条线中的一点和其方向角已知)画出其它的平行于该线的平行线。平行线间的的间距已知。矩形四个顶点已知。
最好有代码。

解决方案 »

  1.   

    设知道平行线中的一条L1,(该条线中的一点和其方向角已知)为:
    L1: 点X0(x0,y0),方向向量N0(n1,n2),L1直线方程为:
     (x,y)=(x0, y0) +(n1, n2)t;
    设矩形四直线方程为:
     R1:(x, y)=(c1,0); 
     R2: (x, y)=(c2, 0)
     R3: (x, y)=(0, d1);
     R4: (x, y)=(0, d2)Step1: 求L1和四直线的交点(加上约束条件只有两解,例如设为U(u1, 0), V(u2, 0))
    Step2:设线的间隔是(p, 0)
     for(i=0;i<条数;i++)
     {
        Line(U+P, V+P);
     }很简单,看一些《空间解析集合的数就明白了》
      

  2.   

    谢谢你的帮助。
    不过,用你的方法只能将点在矩形上下两对边时连成平行线, 
     for(i=0;i<条数;i++)
     {
        Line(U+P, V+P);
     }
    当点循环到上边和右边连线时就会超过右边的边框,  所以也就会超过边界了。
    点在左和下连线时也一样。
    还得麻烦你帮我想想解决了希望你能够告诉我谢谢。
      

  3.   

    画线的问题解决了,下面我来帮你解决一下边界的问题。
    在计算机图形学中,这类问题很典型,可以利用自定义编码实现。
    编码:
    四位码中的第一位代表某点在上边界的上(1)或下(0),第二位代表某点在下边界的上(1)或下(0),同理,第三位代表某点在左边界的左(1)或右(0),第四位代表某点在右边界的左(0)或右(1),
              1000
         ________________
         |              |
         |              |
    0010 |    0000      | 0001
         |              |
         |______________|
              0100
    代码:
    //定义描述直线端点的结构体
    typedef sturct _END 
    {
      int x;
      int y;
      char code;//记录点的编码 
    }END;//记录平行线的端点//定义描述直线端点的结构体
    typedef sturct _LINE
    {
      END  end1;
      END  end2;
    }LINE;假设第i条线为Linei,矩形的四个边界点为POINT类型的Plt(左上),Plb(左下),Prt(右上),Prb(右下);
    Linei.end1.code=0;//0000
    Linei.end2.code=0;//0000
    //判断上边界
    if(Linei.end1.y>=Plt.y)//上边界的上方
    {
      if(Linei.end1.x>=Prt.x)//右边界的右方
      { 
         Linei.end1.code=9;//1001     
      }
      if(Linei.end1.x<=Plt.x)//左边界的左方
      { 
         Linei.end1.code=10;//1010     
      }
    }//判断下边界
    if(Linei.end1.y<=Plb.y)//下边界的下方
    {
      if(Linei.end1.x>=Prt.x)//右边界的右方
      { 
         Linei.end1.code=5;//0101     
      }
      if(Linei.end1.x<=Plt.x)//左边界的左方
      { 
         Linei.end1.code=6;//0110     
      }
    }//然后利用按位与操作(位操作快于数值比较)确定点的位置,比较简单,相关内容可查阅计算机图形学的相关书籍;