- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我需要将任意形状的 GraphicsPath“适合”到定义的空间(几乎总是矩形或圆形)。
我目前使用 Matrix 对象缩放 GraphicsPath 并且缩放工作正常,但问题是获取比例因子。
我能想到的最佳技术是将 GraphicsPath 转换为区域,将矩形或圆形转换为区域,然后执行:
rgnShape.Intersect(rgnCircle);
然后检查是否:
rgnShape.IsEmpty()
但是,这只是告诉我形状是否太大而不适合,并且有必要将形状缩放得更小,然后再试一次(可能很多次)。
有没有一种简单的方法可以立即计算出适合多边形 GraphicsPath 的比例因子,使其完全适合一个圆。结果应该是仍然完全适合圆的最大多边形。
最佳答案
参见 http://en.wikipedia.org/wiki/Smallest_circle_problem用于根据点而非路径讨论此问题,由 Simon 发现。
那么,这样做,使用 rgnShape.Intersect(rgnCircle);
来检查它是否有效。如果失败,则获取每条曲线并获取距离您找到的圆心最远的点(任何给定区域可能有多个这样的点)。
将它们添加到您的点列表中并重新应用算法。您不需要从头开始;您不需要考虑不在边界上的点(即,忽略不在最初调用算法时找到的“Set Q”中的点)。
请注意,这不再是线性的,因为对于第 i 个点,生成递归调用的概率不再是 1/i。
这有一个边缘条件,您必须明确处理。如果在步骤 1 的第一次迭代期间找到的区域之外发现的曲线之一是完美的圆形并且接触外圆,则“Set Q”内将有无限点并且该算法将失败。因此,在第一次应用 rgnShape.Intersect(rgnCircle);
之后,您应该针对这种情况明确检查任何完美的圆形曲线。例如,如果您的形状是 (}
,您应该明确检查 ()
(出于本次讨论的目的,假装 ()
是一个圆圈)如果 (
位于第一次迭代期间找到的区域之外。
这仍然很糟糕,但总比将每条曲线变成点要好。
关于c# - C# 中的 GraphicsPath 多边形拟合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4288526/
此应用程序中的简单曲线仅在将其拖出屏幕或调整窗口大小时才会出现。当应用程序刚启动时它不会出现,当窗口最大化或最小化时它也会消失。然而,所有这些时间,都会打印“Path Drawn”,因此所有绘画函数都
使用 .NET 的 System.Drawing.Graphics GDI 东西,我有一个由两个点数组组成的形状。它们是下图中的红色和绿色像素。 现在我试图用一种颜色填充这个形状的内部。将其绘制为简单
我正在制作一些实用程序类,它们可以将不同类型的符号放置到 CAD 图纸的立面上。我想确保如果我需要处理我这样做的 GraphicsPath 对象。 在下面 getCircle 函数内部的代码中,它表明
我正在尝试在我的程序中绘制一个 GraphicsPath,但它似乎存在向路径添加随机尖峰的问题。路径越宽,情况似乎越糟。我做了一些可以重现这个问题的测试代码。 此代码需要一个包含 PictureBox
我想创建一个 GraphicsPath 和一个点列表来形成位图非透明区域的轮廓。如果需要,我可以保证每张图片只有一个非透明像素的实体集合。因此,例如,我应该能够沿着像素的边缘顺时针或逆时针记录点并执行
我有以下内容 private bool IsPathVisible(Rectangle detectorRectangle, GraphicsPath path, Pen pen) { pat
如下图所示,PictureBox 中的文本与 TextBox 中的文本不同。如果我使用 Graphics.DrawString() 它工作正常,但是当我使用图形路径时,它会截断并且不显示整个文本。您认
是否可以更改 GraphicsPath 对象中某些点的坐标,同时将其他点留在原处? 传递到我的方法中的 GraphicsPath 对象将包含多边形和线条的混合体。我的方法看起来像: void Upda
恐怕我遇到了 Winforms/GDI+ 中的错误。我正在构建一个由直线和曲线组成的图形路径。在某些缩放级别(将变换矩阵应用于图形对象)路径绘制错误,请参见图片: 在做一些测试时,我注意到如果我将 F
我目前正在使用以下代码向图像添加文本: using (GraphicsPath graphicsPath = new GraphicsPath()) { graphicsPath.AddStr
我正在尝试找出将 .net 中的 GraphicsPath 变形为特定形状的最佳方法。我想要实现的结果是将文本扭曲成曲线向上、向下、向左、向右扇形,以及像波浪一样的东西。所有这些都可以在 Adob
我的文本类中有这个方法,但我似乎无法翻转整个文本。 我正在使用矩阵来转换用于绘制字符串的 GraphicsPath。 这是我使用@Jimi 的回答后的代码: public LayerClass
我创建一个 GraphicsPath 对象,添加一个椭圆,旋转 GraphicsPath 对象然后绘制它。现在我想获取 graphicsPath 最左边的点,这样我就可以检查它是否在特定边界内(用户可
我正在尝试制作一个可以从 GraphicsPath 中删除点的橡皮擦工具。到目前为止,我的代码允许用户在窗体上绘画,“删除”按钮应该删除 GraphicsPath 的前 20 个点。它一直有效,直到制
我需要为 GraphicsPath 对象创建一个扩展方法,以确定 GraphicsPath 是顺时针还是逆时针。 像这样: public static bool IsClockwise(Gra
我有一些看起来像这样的代码: GraphicsPath p = new GraphicsPath(); // Add some elements to p ... // ... g.FillPath(
出于某种原因,如果我使用 AddString 将字符串添加到 GraphicsPath,字体将比在字体对话框中看起来要小。 SizeF sz = g.MeasureString(Text, new
我需要将任意形状的 GraphicsPath“适合”到定义的空间(几乎总是矩形或圆形)。 我目前使用 Matrix 对象缩放 GraphicsPath 并且缩放工作正常,但问题是获取比例因子。 我能想
下面的代码画了一个十字: using (SolidBrush brush = new SolidBrush(Color.FromArgb(192, 99, 104, 113))) { usin
我正在尝试绘制类似具有 3 个参数的形状 半径 居中 cutOutLen 切掉的部分是圆圈的底部。 我发现我可以使用 var path = new GraphicsPath(); path.AddEl
我是一名优秀的程序员,十分优秀!