当前位置:编程学习 > C#/ASP.NET >>

c#中判断两个图形元素是否相交?

最近项目需要判断两个图形要素是否相交的问题:
   一个图形元素是GraphicsPath 构造的闭合多边形,另一个图形元素是矩形,然后用region.interSect(矩形)来获取两者的交集元素,但明明是有交集的,返回的交集却为空。
   可能的原因是构建图形要素的值太小造成的返回结果不准确,创建图形要素的坐标限定在:{x:(-180,180)} {y:(-90,90)}
    请问有什么办法可以使下面的交集能够正确返回?
   注:下面的两图形元素肯定是有交集的。

        public void intersectTestx(PaintEventArgs e)
        {
            PointF[] pts = new PointF[4];
            pts[0] = new PointF(115.116066f, 40.48523f);
            pts[1] = new PointF(115.879951f, 40.5706635f);
            pts[2] = new PointF(116.040909f, 39.998024f);
            pts[3] = new PointF(115.283585f, 39.9120445f);
       //构建GraphicsPath对象
            GraphicsPath gpTmp1 = new GraphicsPath(System.Drawing.Drawing2D.FillMode.Alternate);
            gpTmp1.AddPolygon(pts);
       //构建region对象
            Region rgnTmp = new Region(gpTmp1);

            SolidBrush myBrush1 = new SolidBrush(Color.Black);
            e.Graphics.FillRegion(myBrush1, rgnTmp);
       //构建矩形对象 
            RectangleF recOri = new RectangleF(115.67f, 40.27f, 0.29f, 0.36f);

            e.Graphics.DrawRectangle(Pens.Red, Rectangle.Round(recOri));
       //获取矩形对象和region对象的交集            
            rgnTmp.Intersect(recOri);

            // Fill the intersection area of myRegion with blue.   
            SolidBrush myBrush = new SolidBrush(Color.Blue);
            e.Graphics.FillRegion(myBrush, rgnTmp);
        }
 分不多,请大家见谅!谢谢。 --------------------编程问答-------------------- gpTmp1.AddPolygon(pts);
他只代表线,没有形成一个区域。或许可改为:

gpTmp1.AddRectangle(new RectangleF(115.116066f, 40.48523f, 1,1))
gpTmp1.AddRectangle(new RectangleF(115.879951f, 40.5706635f, 1,1))
gpTmp1.AddRectangle(new RectangleF(116.040909f, 39.998024f, 1,1))
gpTmp1.AddRectangle(new RectangleF(115.283585f, 39.9120445f, 1,1))
--------------------编程问答-------------------- 请忽略上面回复,正确应该是:
gpTmp1.AddPolygon(pts);
他只代表线,没有形成一个区域。既然是线就应该有宽度的信息,所以改为:
gpTmp1.AddPolygon(pts);
float width = 1f;
gpTmp1.Widen(new Pen(Color.Empty, width)); --------------------编程问答-------------------- 最近挖坟党出没频繁...2007年帖大量出土...
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,