Tag: 多边形

检查dbgeometry dbgeometry / dbgeography点是否在多边形内

我有一个问题,希望你们能帮助我解决。 我有一个DbGeometry点(或DbGeography,我可以使用两者),我想检查它是否在DbGeometry Polygon(或者DbGeography)中。 我现在这样做: var dbZones = new List(); foreach(var zone in zones) { var res = from z in DatabaseContext.Zones let boundary = !z.BoundaryGeometry.IsValid ? SqlSpatialFunctions.MakeValid(z.BoundaryGeometry) : z.BoundaryGeometry where z.ID == zone.ID && point.Within(boundary) select z; if(res.FirstOrDefault() != null) dbZones.Add(res.FirstOrDefault()); } 所以我遍历区域(我的数据库的EF实体)并检查我的这个点是否在这个边界内。 问题是它没有返回任何结果,但我知道那个点在该边界内,因为我手动创建了边界,并且该点位于该边界内。 任何人都可以告诉我,如果有其他方法可以做到这一点或其他什么,我做错了什么? 非常感谢。 曼努埃尔

如何将多边形绑定到WPF中的现有PointCollection?

即使我认为有限的集合有数据(我在调试中检查过),我当前的实现也没有在表单上显示任何内容。 这是一些代码: public event PropertyChangedEventHandler PropertyChanged; PointCollection imagePoints; public PointCollection ImagePoints { get { return this.imagePoints; } set { if (this.imagePoints != value) { this.imagePoints = value; if (this.PropertyChanged != null) { PropertyChanged(this, new PropertyChangedEventArgs(“ImagePoints”)); } } } } 和相应的xaml: 现在,我通过编写代码完成了所有绑定。 在这个例子中 ,它工作正常,但在我的情况下,点不会出现在多边形上。 有智慧的珍珠吗? 编辑:这是完整的xaml代码 编辑:修改配置文件后,我在输出窗口中找到它: System.Windows.Data Information: 41 : BindingExpression path error: ‘ImagePoints’ property […]

根据输入坐标绘制多边形

如何根据C#中给出的输入坐标绘制多边形。

在旋转后,查找线/点左侧的哪一点

我目前正试图在团结中编写一个着色器,如果两个国家不属于同一个玩家(视觉辅助以查看您的边界),则在风险游戏中围绕各国绘制三角形图案。 现在,我遇到了使着色器正确设置国家的问题。 它始终将国家0设置为左侧,将国家1设置为右侧 – 国家0和1以编程方式设置。 线条边界可以在0到359度之间。 我如何找到0和1国家是我在线的中点左右两点画一个点,一个.01f,一个.1f和一个1f远离每个方向的中点,然后围绕中点旋转它们适当的位置。 之后,我做了一个奇怪的检查,看看这些点是在每个国家的内部还是外部,并比较重量结果(最接近得到3分,中间得到2,最远得到1,以防万一有人建立一个真正搞砸了面向另一个国家的国家)。 在我的测试图中,接近等切的八边形,边框正确显示(在我将角度超过90且小于或等于180的情况下颠倒了国家0和1的位置之后)。 工作没有缺陷,但在其他地图中它不能很好地工作。 除了国家分配之外的所有东西都运作良好,所以我很好奇是否有人知道更好的方法来找出哪个点是左边还是一个细线,或者更好的概念方法来处理这个问题。 上面的情况基本上就是在我做的时候,红色是左边是蓝色,然后我只是检查3个不同的点,然后权衡左边和权利发现偶数/ odding它到适当的国家(一个在+/-。 01,另一个在+/- .1和第三个1,在偶数/奇数舍入问题的情况下接近)。 然后,如果我发现国家A在右边,我会翻转它们,因为它是根据我绘制的角度在左边。 (我的着色器在第一个和第二个左边渲染,因此为什么我这样做)。

实现用于检测自相交多边形的powershell算法

我最初实现了Hoey-Shamos算法,但是它太复杂了以至于未来的可维护性(我没有说明),并且没有正确报告,所以我将使用优化的powershell算法。 我的问题是:如何优化此代码才能使用? 就目前而言,我的代码包含一个嵌套的for循环,两次迭代相同的列表。 编辑:将线条转换为HashSet并使用两个foreach循环…扫描10,000个约45秒。 这还不够。 foreach (Line2D g in lines) { foreach (Line2D h in lines) { if (g.intersectsLine(h)) { return false; } } } // end ‘lines’ for each loop 如果我强制我的“intersectsLine()”方法返回false(出于测试目的),扫描10,000条记录仍然需要8秒(我有700,000条记录)。 这太长了,所以我需要优化这段代码。 在尝试将其与所有其他行进行比较后,我尝试从列表中删除行,但是存在准确性问题(不知道为什么)并且速度增加几乎不可察觉。 这是我的intersectsLine方法。 我在这里找到了另一种方法,但看起来所有的方法调用和诸如此类的东西都会变慢。 计算斜率对我来说似乎并不像是需要太多的计算(如果我错了,请纠正我?) public bool intersectsLine(Line2D comparedLine) { //tweakLine(comparedLine); if (this.Equals(comparedLine) || P2.Equals(comparedLine.P1) || P1.Equals(comparedLine.P2)) { return false; } double firstLineSlopeX, […]

检查多边形是否为自相交

我有一个System.Windows.Shapes.Polygon对象,其布局完全由一系列点确定。 我需要确定这个Polygon是否是自相交的; 即,如果多边形的任何边与非顶点的点处的任何其他边相交。 有一种简单/快速的方法来计算它吗?

c#wpf多边形到位图不显示任何内容

对不起,如果您认为这个问题已经得到解答,我确实到处试图找出当我这样做的时候,它没有显示任何内容。 这是我的全部代码: Polygon hexagon = new Polygon(); PointCollection pc = new PointCollection(); double side = 25; double xOffset = 0, yOffset = 0; double r = System.Math.Cos((System.Math.PI / 180) * 30) * side; double h = System.Math.Sin((System.Math.PI / 180) * 30) * side; //Create the 6 points needed to create a hexagon pc.Add(new Point(xOffset, yOffset)); […]

计算C#中不规则多边形的面积

我设法写了一个’for dummies’如何计算C#中不规则多边形的面积, 但我需要它对任何数量的顶点都是动态的 。 有人可以帮忙吗? 类: public class Vertex { private int _vertexIdx; private double _coordX; private double _coordY; private double _coordZ; public Vertex() { } public Vertex(int vertexIdx, double coordX, double coordY, double coordZ) { _vertexIdx = vertexIdx; _coordX = coordX; _coordY = coordY; _coordZ = coordZ; } public int VertexIdx { get { […]

计算正多边形顶点的坐标

我正在编写一个程序,我需要绘制任意数量边的多边形,每个边都由一个动态变化的给定公式进行翻译。 有一些相当有趣的数学,但我被困在这个问题上。 如何只计算边数 ,并且理想地(但不是必须)将原点放在中心,我如何计算正多边形(一个所有角度相等的顶点)顶点的坐标? 例如:六边形可能有以下几点(都是float ): ( 1.5 , 0.5 *Math.Sqrt(3) ) ( 0 , 1 *Math.Sqrt(3) ) (-1.5 , 0.5 *Math.Sqrt(3) ) (-1.5 , -0.5 *Math.Sqrt(3) ) ( 0 , -1 *Math.Sqrt(3) ) ( 1.5 , -0.5 *Math.Sqrt(3) ) 我的方法看起来像这样: void InitPolygonVertexCoords(RegularPolygon poly) 并且需要将坐标添加到此(或类似的东西,如列表): Point[] _polygonVertexPoints; 我主要对这里的算法感兴趣,但C#中的例子会很有用。 我甚至不知道从哪里开始。 我该如何实施呢? 它甚至可能吗?! 谢谢。