本人想做一个程序,内容要包括1000多个多变型,我用画图来画,但由于那些多变型位置是随机的,因此有可能有多个多边型会重叠.
问题一:怎么用最快速的方法来画这一千多个多边型呢?
问题二:如果在程序中,我要选中其中一个多边型,我该如何判断位置呢?特别是当A的面积小于B,且A比B完全覆盖了,我该怎么才能选择到A这个多边型呢?
问题三:当我随意改变某一个多边型的大小或者位置时,我是否需要重新画所有的多边型,还是有更好的方法来只画我选中的内容呢?
以上三个问题,请各位帮忙解决,能解决一个是一个,谢谢!

解决方案 »

  1.   

    问题一:写一个加载Line的函数,用Line组成多边形;
    Private Function drawLine(ByVal i As Integer, ByVal X1 As Double, ByVal Y1 As Double, ByVal X2 As Double, ByVal Y2 As Double)
    Load Line1(i)
    Line1(i).X1 = X1
     Line1(i).Y1 = Y1
     Line1(i).X2 = X2
      Line1(i).Y2 = Y2
        Line1(i).Visible = True
    End Function
      

  2.   

    问题三:如果你是用Line组成的多边形.只要改变Line的位置就行了,不要都重画.
    问题二最麻烦,你只能按Line的索引来操作每一条线,操作一个多边形有困难,试想一下屏幕上有1000多个多边形是什么情形.
      

  3.   

    第一,使用PolyLineTo进行绘图。
    第二,使用BeginBegin、PolyLineTo、EndPath、PathToRegion建立多边形区域,然后通过PtInRegion、CombineRgn等函数判断多边形的相互关系和点与多边形的关系。
    需要注意的是,上面两次提到PolyLineTo,这是因为在路径中,PolyLineTo并不会显示绘图结果,想要绘图结果,还得在路径外绘制一次,所以提到了两次。
      

  4.   

    感觉比较麻烦,楼主可不可以这样考虑?首先确定一个虚拟的圆,根据圆来将多边形的各个点的坐标计算出来再存入坐标数组,再将这个数组的内容赋值给MsChart控件,这样应该很快。
      

  5.   

     谢谢各位的帮忙!原来这么复杂啊,我还想着现在不仅仅画多边型,而且是画图形,看来要用directX才能搞掂
      

  6.   

    直接上DX算了。又不是多复杂。按次序填充多边形的顶点,然后DP就可以了。不过要做到选择多边形的话,还得用一些算法。(如果仅仅是2维的,而且图像没有缩放的话,我觉得可以用Z测试来搞定)