Tag: 几何

平滑折线,变形最小

我有一条2D闭合折线,相当光滑。 然而,定义折线的顶点不是相等的间隔。 有时两个会非常接近,有时多达四个会非常接近。 我想平滑折线,但是常规平均算法会缩小面积: for (int i = 0; i < (V.Length-1); i++) { PointF prev = V[i-1]; //I have code that wraps the index around. PointF next = V[i+1]; PointF pt = V[i]; float ave_x = one_third * (prev.X + next.X + pt.X); float ave_y = one_third * (prev.Y + next.Y + pt.Y); smooth_polyline[i] […]

在计算2D空间中两点之间的对角线交点时如何确定+/-符号?

这是另一个问题的分支,与Keith Randall对问题的回答有关。 请快速查看图像,看看下面的function是做什么的。 简而言之,如果x2 != x1和y2 != y1则2D网格上的任何两个点都将具有两个对角交点。 我实现了以下function,但无法弄清楚如何确定从哪个单元中减去delta以及添加到哪个单元。 因此,对于某些坐标,结果是准确的,而对于其他坐标,它们是相反的。 // This class is the same as [Point] except // it uses BigInteger instead of Int32 types. public class Cell { System.Numerics.BigInteger X = 0; System.Numerics.BigInteger Y = 0; } public List GetIntersections (Cell c1, Cell c2) { List cells = new List(); System.Numerics.BigInteger delta […]

如何计算两个给定点和给定距离之间的点?

我有A (35.163 , 128.001)点A (35.163 , 128.001)和B (36.573 , 128.707)点B (36.573 , 128.707) 我需要计算点在A点和B点之间的点 使用2点之间的标准距离公式,我发现D = 266.3 线AB内的每个点(黑点p1,p2,… p8)以相等的距离d = D / 8 = 33.3分开 我如何计算p1,p2,… p8的X和Y? 欢迎使用Java或C#语言的示例 或者只是指出一个公式或方法会做。 谢谢。 **上述计算实际上用于计算地图中阴影级别的虚拟点,并用于阴影区域插值目的*

从地平线获得一条线的角度

我想知道如何从水平轴X获得AB线的角度.SO中的其他问题仅在两条线之间进行。 我知道我总是可以绘制二线AC并计算,但我想知道是否有更快的方法。 编辑:我很确定我没有做过早优化。

使用BoxCastAll检测两个对象之间是否有任何对象

在开发移动3D游戏的过程中,我遇到了一个盒子投射问题。 我想检查我的玩家和他的目标之间的路径,以避免他穿过环境物体(他没有附着刚体并且只能在特定点之间移动)。 这是我用来检查的代码: private bool CheckPath (Vector3 position, Vector3 target) { Vector3 center = Vector3.Lerp(transform.position, target, 0.5f); Vector3 halfExtents = new Vector3(1, 1, (transform.position – target).magnitude) / 2; Quaternion rotation = Quaternion.LookRotation((transform.position – target).normalized); RaycastHit[] rhit = Physics.BoxCastAll(center, halfExtents, (transform.position – target).normalized, rotation); bool result = rhit.All(r => r.collider.tag != “Environment”); DebugUtilities.BoxCastDebug.DrawBox(center, halfExtents, rotation, result […]

Mongodb:如何检查多边形中是否包含一个点?

我有一个点arrays(纬度,经度)区域的点列表。 我已经在这些数组上做了一个索引,现在我想知道一个点是否在该多边形内。 MongoDB可以吗? 我已经尝试过这些命令,但没有运气: > polygonA = [ [ 48.780809,2.307129],[ 48.781809,2.300129],[ 48.770809,2.317129]] > db.contours.find({ “rings.ring” : { “$within” : { “$polygon” : polygonA } } }) 和 > db.runCommand( { geoNear : “contours” , within : [2.307129,48.780809,], num : 10 } ); 我的数据结构是: > db.contours.findOne({},{‘rings’:0}) { “_id” : ObjectId(“50364617d591ac166000c196”), “foundfieldname” : “Name”, “geometrytype” : “geometryPolygon”, […]

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

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

找到两个3D线段之间的最短距离

我有两个线段,在开始/结束点用3D点表示。 线: class Line { public string Name { get; set; } public Point3D Start { get; set; } = new Point3D(); public Point3D End { get; set; } = new Point3D(); } 坐标X,Y和Z的3D点数仅为3倍。 3DPoint: class Point3D { public double X { get; set; } public double Y { get; set; } public double Z […]

找到重叠两个共线段的段的算法

更新 我在C#中的原始实现 我在C#中的最终实现,基于我得到的答案。 鉴于以下条件,我如何以编程方式找到两条线之间的重叠段? 另外,对于不同的斜率: 对于垂直线: 对于水平线: 注意:对于所有象限! 我开始编写所有可能的条件,但它变得丑陋。 public Line GetOverlap (Line line1, Line line2) { double line1X1 = line1.X1; double line1Y1 = line1.Y1; double line1X2 = line1.X2; double line1Y2 = line1.Y2; double line2X1 = line2.X1; double line2Y1 = line2.Y1; double line2X2 = line2.X2; double line2Y2 = line2.Y2; if (line1X1 > line1X2) { double […]

如何确定GDI +中两条线的交点?

我正在使用.NET来创建一个具有绘图表面的应用程序,类似于Visio。 UI使用Graphics.DrawLine连接屏幕上的两个对象。 这个简单的实现工作正常,但随着表面变得更复杂,我需要一种更健壮的方式来表示对象。 这些强大要求之一是确定两条线的交叉点,因此我可以通过某种图形指示分离。 所以我的问题是,有人可以建议一种方法吗? 也许使用不同的技术(可能是GraphViz)或算法?