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#