Tag: 多边形

使用绕组编号指向多边形

问题是:如何确定一个点是否在多边形内? 这个问题已被多次询问和回答。 有多种方法可用于确定点是否在多边形内。 我已经了解了绕组数算法,将另一个SO线程的可靠答案移植到C#中并在其周围编写了xUnit测试,以确保我能够无情地重构。 目标是得到一个答案,所有这些似乎都使用过程编程方法和变量名称,这些名称与您在数学公式中找到的类似,并将其重构为一组合理合理的OOP类和方法。 所以,要将这个问题专门改为我将继续提供的答案: 如何确定位置/点(纬度和经度)是否在OOP C#中的多边形内?

C#clip linesegment with clipper library

我正在使用限幅器对多边形执行一系列操作,这些操作代表程序中对象的轮廓。 问题是,我现在想要剪切一个线段网格来填充这些轮廓,但我正在努力用Clipper做到这一点。 目前我将线条转换为厚度为2个单位的矩形,然后我进行交叉操作,最后我需要将新多边形恢复为线段。 这样效率很低,并且会产生很多错误。 这可以用Clipper完成,如果没有其他我可以使用或我需要实现我自己的线段剪辑器吗?

用C#填充八边形

我创建了一个绘制八边形的方法,只要尺寸为200或更高,它就能很好地工作 public static void FillOctagon(PaintEventArgs e, Color color, int x, int y, int width, int height) { e.Graphics.SmoothingMode = SmoothingMode.AntiAlias; var points = new [] { new Point(((x + width) / 2) – (width / 4), y), //side 1 new Point(x, ((y + height) / 2) – (height / 4)), //side 2 new Point(x, ((y […]

如何在图片框中绘制边缘上标记的多边形

我试过这种方式,但我没有得到所需的结果: System.Drawing.Point[] p = new System.Drawing.Point[6]; p[0].X = 0; p[0].Y = 0; p[1].X = 53; p[1].Y = 111; p[2].X = 114; p[2].Y = 86; p[3].X = 34; p[3].Y = 34; p[4].X = 165; p[4].Y = 7; g = PictureBox1.CreateGraphics(); g.DrawPolygon(pen1, p); 我想要做的是在picturebox中绘制一个多边形,该多边形使用不同的颜色并根据速率(角的数量和边的坐标)定义

改变多边形的点数

解决方案 窗口拖动的动态余量 所以我试图让我的多边形在窗口移动时移动。 我有; private void ResetPolygon(Point Point1, Point Point2, Point Point3) { SpeechPoly.Points.Clear(); ObservableCollection myPointCollection = new ObservableCollection(); myPointCollection.Add(Point3); myPointCollection.Add(Point2); myPointCollection.Add(Point1); foreach (Point p in myPointCollection) { SpeechPoly.Points.Add(p); } } private void Window_LocationChanged(object sender, EventArgs e) { if (this.IsLoaded) { Point Point1 = new Point(newPoint3); Point Point2 = new Point(newPoint2); Point Point3 = new […]

将壁序列表转换为相干多边形的算法

我有一对成对点描述多边形的点列表,如下所示: 是正方形。 请注意,每对点描述一条线,因此我们的方块由线组成 < > < > < > < > 然而,我必须绘制这些多边形,当所讨论的点都正确有序并且没有孔时,这些多边形可以正常工作。 不幸的是,当输入类似时,这有时会出错 并且生成的多边形很奇怪或者有多边形几个洞 在这些情况下,使用drawpoly(点)绘制这些多边形的初始事情是行不通的。 这是在c#中,输入实际上是List ,其中GeoData包含2个点(以及一些其他misq数据)。 对于输出,我正在考虑制作一个List和一个List>,其中第一组点是外线,第二个列是孔,这会起作用吗? 我确实需要对多边形进行一些额外的计算,然后只绘制,但我认为使用特殊的孔列表将是最简单的。 这是一个例子: 左边是我目前右边的输入。

C#填充多边形的一侧

在c#中,我可以在位图图像中填充多边形,如下所示。 using (Graphics g = Graphics.FromImage(bitmap)) { g.FillPolygon(colorBrush, points.ToArray()); } FillPolygon方法填充多边形内的像素,在这种情况下,白色像素和黑色像素保持不变。 现在,我想要与此操作相反。 这意味着,外部像素将被填充,内部像素将保持不变。 在这种情况下,黑色像素是外部像素。 编辑我需要这个,因为我要说,我有一个对象的二进制图像。 我需要用背景颜色(黑色)剪切像素,白色多边形内的像素将保持不变。

用于在不规则多边形中找到点的算法

Imagagine我有一个如下的多边形: 我正在寻找一个C#算法,我可以在任何多边形内找到一个点(可能是中点或也是一个随机点)。 为了找到质心,我使用了以下算法: private Point3d GetPolyLineCentroid(DBObject pObject, double pImageWidth, double pImageHeight) { Point2d[] pointArray = GetPointArrayOfRoomPolygon(pObject); double centroidX = 0.0; double centroidY = 0.0; double signedArea = 0.0; double x0 = 0.0; // Current vertex X double y0 = 0.0; // Current vertex Y double x1 = 0.0; // Next vertex X double y1 = […]

如何连接两个平行的2d多边形以创建无缝的3D网格?

假设我有两个多边形,一个在另一个之上,就像这样: 我想连接它们的顶点,用它们周边的三角形创建一个三维网格。 此图显示了一种可能的方法(橙色线代表三角形边): 这种事情可以由人类直观地完成,但我在将其转化为工作算法时遇到了麻烦。 多边形存储为List 。 它们总是很简单,可能是凹的。

围绕折线创建多边形,如缓冲区

我环顾四周寻找一个如何获取折线并在其周围创建缓冲区的示例,以便最终得到一个多边形。 到目前为止,我发现我需要Minkowskis Sums这样做,但我无法理解原始算法并将其转换为代码。 我更喜欢C#中的一个例子或算法的演练。