Tag: geometry

获取几何长度

有谁知道在像素中获得WPF几何的长度的有效方法? 我知道WPF中的几何是基于矢量的,因此实际上没有像素长度。 但必须能够根据可见的绘制图像获得长度。 我的意思是如果我在1024×800像素图像中绘制一些几何图形,则必须能够获得这些几何图形的长度。 我在这里错了还是有任何可能有效的方法来获取这些信息? 先感谢您! 迈克尔

多行WPF FormattedText中特定字符的坐标

如何获取多行WPF FormattedText中特定字符的位置(xy坐标)? 我的文字可以包含斜体部分,粗体部分,不同的字体,不同的字体大小,不同的比对等等。我需要得到第30个字符的坐标,这可能是第3行。 通过使用Geometry中的Children(单词)的子(字母),我可以从FormattedText(BuildGeometry)构建一些半工作技巧,但这并不总是有效,因为一些字形合并在一个单个几何体(例如“fi”:仅一个几何体)。

如何从两个坐标计算角度?

我正在开发一个基于3D的对象的项目,并通过我的程序操作它们。 我目前有一个文本框,允许我放置一个度数的标题和一个按钮,它将计算所需的值,使我的主要对象改变其标题。 这是该函数的代码: private void btnSetHeading_Click(object sender, EventArgs e) { if (this.textBoxHeading.Text.Length == 0) return; float heading = (float)0; try { heading = float.Parse(this.textBoxHeading.Text); } catch (FormatException ex) { MessageBox.Show(ex.Message); return; } if (heading (float)360) { MessageBox.Show(“Invalid heading parameter. Acceptable range: 0 – 360”); return; } float tempCosine = (float)Math.Cos(((heading * Math.PI) / (float)360.0)); float […]

合并多边形的有效算法

我有一个多边形列表,在这个列表中,一些多边形重叠,或触及其他多边形。 我的任务是合并彼此重叠或触摸的所有多边形。 我有一个union方法来做到这一点。 最有效的方法是什么? 我现在能想到的是循环多边形列表,检查合并列表以查看此多边形是否已经某种方式属于合并列表中的一个多边形,如果是,则将它们联合起来,如果不是,则添加此多边形到合并列表的末尾。 再次重复上述步骤几次,以确保所有多边形都正确组合。 这种方法似乎非常不优雅; 有一个更好的方法吗?

将一个矩形的坐标转换为另一个矩形

在上图中我展示了两个矩形 矩形1的x可以在-900到13700之间变化,Y可以在-600到6458之间变化 矩形2的坐标X可以在0到3000之间变化,y可以在0到2000之间变化 另外: 矩形2的起始点位于左上角位置(0,0),而矩形1的起始点(宽度/ 2,高度/ 2)。 我需要做的是 :使用缩放或平移将矩形1的点转换为矩形2的点。 那么,为了将矩形1的坐标变换为矩形2 , x和y坐标应该是什么缩放因子?

使用C#查找多边形的中轴

我的任务是弄清楚如何找到多边形的中心线。 我的谷歌搜索让我相信我所需要的是’Medial Axis’。 像这样: 替代文字http://sofzh.miximages.com/c%23/center_line.png 根据我所读到的,我需要的是通过使用2D Voronoi图构造算法来生成片段。 我在codeplex(FortuneVoronoi)上找到了Voronoi算法的C#版本,在将多边形应用到它之后,我最终得到了这个: 替代文字http://sofzh.miximages.com/c%23/gaia_voronoi.png 绿色是原始多边形。 橙色是Voronoi顶点,黑色线是voronoi边缘。 我可以在这些顶点看到我需要的材料,但我不确定下一步需要过滤掉我不需要的所有东西。 我很感激您提供的任何帮助。

如何在四边形中找到随机点?

我必须能够为飞行模拟器的航点设置随机位置。 数学挑战很简单: “要在四边形中找到一个随机位置,这个点在任何位置都有相同的可能性。” 看起来像这样: ABCD四边形的示例是:A:[21417.78 37105.97] B:[38197.32 24009.74] C:[1364.19 2455.54] D:[1227.77 37378.81] 提前感谢您提供的任何帮助。 🙂 编辑感谢您的回复。 我将在周末看一下这个,然后将奖励接受的答案。 顺便说一下,我应该提到四边形可以是CONVEX OR CONCAVE。 Sry’bout dat。

分组地理形状

我正在使用Dundas Maps并尝试绘制世界地图,其中国家/地区被分组到特定于业务实现的区域。 我有世界上每个国家的形状数据(点和段)。 我可以通过将区域内的所有国家/地区的所有点和细分添加到新的区域形状来将国家/地区组合到一起。 foreach(var region in GetAllRegions()){ var regionShape = new Shape { Name = region.Name }; foreach(var country in GetCountriesInRegion(region.Id)){ var countryShape = GetCountryShape(country.Id); regionShape.AddSegments(countryShape.ShapeData.Points, countryShape.ShapeData.Segments); } map.Shapes.Add(regionShape); } 问题是国家边界线仍然出现在一个区域内,我想删除它们,以便只显示区域边界。 Dundas多边形必须在同一点开始和结束。 所有国家形状都是如此。 现在我需要一个能够: 确定国家边界在区域边界的交叉点,以便我可以加入区域边界段。 确定哪些国家/地区边界不是区域边界,以便我可以丢弃它们。 对生成的区域点进行排序,以便它们按顺序描述形状边界。 以下是我到目前为止使用地图的地方。 您可以看到仍需要删除国家/地区边界。 例如,蒙古和中国之间的边界应该被丢弃,而蒙古和俄罗斯之间的边界应该保留。 我需要保留区域边界的原因是区域颜色在传达信息方面很重要,但相邻区域可能是相同的颜色。 这些地区可以改变以包括或排除国家,这就是为什么区域塑造必须是动态的。 编辑:我现在知道我正在寻找的是一个多边形联盟。 David Lean 解释了如何使用SQL Server 2008中的空间函数来执行此操作,这可能是一个选项,但我的努力已经停止,因为生成的多边形联合非常复杂,以至于SQL将其截断为43,480个字符。 我现在正在尝试为此找到解决方法或找到在代码中进行联合的方法。

缩短一行像素数

我正在使用.NET GDI +绘制业务对象的自定义图表。 除此之外,该图由连接对象的几行组成。 在特定场景中,我需要将一条线缩短特定数量的像素,比方说10个像素,即找到线的终点之前10个像素的线上的点。 想象一个半径为r = 10像素的圆,以及一条带有起点(x1,y1)和终点(x2,y2)的直线。 圆圈以线的终点为中心,如下图所示。 插图http://sofzh.miximages.com/c%23/140b5w5.gif 如何计算用红色圆圈标记的点,即圆与线之间的交点? 这会给我一个新的终点,缩短10个像素。 解 感谢您的答案,我可以将以下程序放在一起。 我将它命名为LengthenLine,因为如果我想缩短线条,我发现传递负像素数更自然。 具体来说,我试图组合一个可以绘制圆角线的function,可以在这里找到。 public void LengthenLine(PointF startPoint, ref PointF endPoint, float pixelCount) { if (startPoint.Equals(endPoint)) return; // not a line double dx = endPoint.X – startPoint.X; double dy = endPoint.Y – startPoint.Y; if (dx == 0) { // vertical line: if (endPoint.Y […]

.NET几何库

我正在.NET中开始一个新项目,需要一些几何算法,例如: 检查点是否在多边形内 贝塞尔曲线 线路交叉口等 我找到了一些图书馆,但是,它们付费/昂贵,包括: G# – http://www.ceometric.com/store.html DigitalRune几何 – http://www.digitalrune.com/Products/Geometry/Overview.aspx NLIB – http://www.smlib.com/nlib.html sgCore – http://www.geometros.com/sgcore/index.htm 这些都是我需要的,甚至更多,这使我花费太多的钱在一些不会被太多使用的东西上。 我找到了一些开源项目: MATH.NET alglib 抗粮( C#绑定/端口 ) 但是,这些比我需要的要少,但是,当你在谷歌上看时,它们很容易找到。 经过一段时间的搜索,我找到了这个库: Tektosyne ( http://www.kynosarges.de/Tektosyne.html ) 哪个是我需要的大部分内容。 它也是免费的,并按“原样”提供。 这很好。 但是,如果您搜索谷歌“Tektosyne”,您会发现很少的结果。 所以我的问题是(对于那些在C#of StackOverflow中有一些“高级”几何使用经验的人): 你有另外的图书馆推荐或为什么这个图书馆不“受欢迎”?