Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 当分辨率增加时,如何计算网格点的位置?_Algorithm_Resolution_Mesh - Fatal编程技术网

Algorithm 当分辨率增加时,如何计算网格点的位置?

Algorithm 当分辨率增加时,如何计算网格点的位置?,algorithm,resolution,mesh,Algorithm,Resolution,Mesh,假设我们有一些网格(请参阅CorelDraw的插图,它使用了中“网格填充”仪器中的相同技术) (来源:) 显然,这种网格由一组点表示,它们之间的线实际上是使用该组点确定的(可能以某种方式插值)。该仪器还具有按钮以提高网格分辨率。 我的问题是,这类事情是如何计算的?假设我有一组实际代表网格的点(为了简单起见,让我们假设“边界”上的点是静态的,不能移动)。我想增加网格分辨率,例如,增加4倍(这样网格点的数量实际上变成4*初始点\u计数) 如果我仅有的数据是初始点矩阵,我应该如何计算新点的位置? 最

假设我们有一些网格(请参阅CorelDraw的插图,它使用了中“网格填充”仪器中的相同技术)


(来源:)

显然,这种网格由一组点表示,它们之间的线实际上是使用该组点确定的(可能以某种方式插值)。该仪器还具有按钮以提高网格分辨率。

我的问题是,这类事情是如何计算的?假设我有一组实际代表网格的点(为了简单起见,让我们假设“边界”上的点是静态的,不能移动)。我想增加网格分辨率,例如,增加4倍(这样网格点的数量实际上变成
4*初始点\u计数

如果我仅有的数据是初始点矩阵,我应该如何计算新点的位置?

最快的(甚至是近似的)方法适合我,但我不知道在哪里搜索或如何开发这种算法


谢谢。

听起来像是(坐标系在球面上)的工作。

你看过吗?应该适用于像这样细化网格。

您需要的是网格平滑算法。不幸的是,我手头没有任何资源,所以我只能向谷歌建议“网格平滑”。这是一个巨大的领域

编辑
下面是一个很好的、简短的、实现网格平滑的两种方法/算法的总结:

我将首先通过插值在所有直线上添加中间点(图中的曲线很可能是某种类型的,因此我将对它们进行插值,或者按照Mau的建议使用双线性插值)把新的点放在旧点的中间,给我3倍的分辨率。然后,我将在这些新点之间进行插值(如果精度是关键,则两种方法都可以),并在交点(或中间点)处放置一个新点。请参见下面的“插图”


对现有答案的评论:

在我看来,Mau和martient的回答描述了一个用(而你没有已知形式)近似已知形式的问题的解决方案

Dave提到的算法可以平滑任何形式,但不一定以预期的方式

如果你看你的答案,你会发现新的点来自点之间的线性插值,如果这对你来说足够好,所有的解决方案都是可比的(除了Dave的)

这样增加网格密度不会使生成的网格看起来更“漂亮”-与原始形状更相似。如果这还不够好,那么您首先必须确定您试图用网格表示的实际形式/形状是什么(如果您可以扩展您的示例,它可能会更明显;此工具是否仅创建圆形网格,或者它可以采用任何形状并“网格填充”它?)

另外,您应该注意到,您不使用多边形网格,而是使用曲线网格(可能),这也是某些答案无法直接应用于您的问题的另一个原因

编辑: 仔细观察corel是如何做到这一点的,并假设您实际上知道曲线,而不仅仅是点(!):

  • 你们从一组曲线开始,在我看来,你们有水平和垂直曲线开始
  • 如果要提高分辨率(例如,水平分辨率),可以选取两条连续的竖曲线,并将它们在中点通过的水平曲线的每一段分割,从而创建一组定义新曲线的点;也可以插值曲线通过该点的角度

上面(手工绘制)的图片试图说明 a) 添加以这种方式生成的新曲线(红色)。 b) 添加线性插值多段线(蓝色),这更倾向于多边形网格方法(因此您可以判断这是否适合您)

注意:根据准备网格的算法,将网格线视为曲线可能有好处,也可能没有好处(对于某些算法,红色和蓝色解决方案之间的差异可能可以忽略不计,对于其他算法则很重要)。如果算法只是期望点,那么您还应该看看如何用点来近似贝塞尔曲线(通读可能会有所帮助;不过您不需要像素精度)


为了获得最高精度/最佳结果,你应该首先增加曲线的密度,并用直线近似它们。

@HardCoder1986:我认为这不会达到你想要的效果-看看你是否可以实现它。但拉普拉斯平滑只是网格平滑的众多实现之一。我承认,我的提示对初学者来说没有多大价值。请随意发布有关该主题的好资源。@Dave:这只是一个例子,说明平滑算法会退化轮廓/轮廓。@Unreason并非所有算法都会这样做。有些方法将输入网格的顶点视为特征并保留它们。@Dave,它仍然会线性(或以其他方式)退化countour/轮廓。我想向OP指出,他从形状/轮廓(贝塞尔曲线段)的完美信息开始,平滑方法会降低它。另一方面,OP确实指定了可用的输入只是“网格点矩阵”,所以你的答案是关于这一点的,只是我认为OP实际上并不想这样做——所以我是主观的,但OP同意(现在)。这种“网格填充”对任何形状都有效还是只为圆创建网格?我不清楚它是如何工作的。还有,任何形状的颜色的意义是什么。在我目前的情况下,我实际上是罗
Initial state  =>  Interpolate  =>  Place points  =>  Interpolate => Final state
  x       x         x-------x        x   x   x         x   x   x      x   x   x
                    |       |                              |    
                    |       |        x       x         x---+---x      x   x   x
                    |       |                              |
  x       x         x-------x        x   x   x         x   x   x      x   x   x