将曲面拟合到 3 到 100 个点,其中 z 值为 3D
Fit surface to 3 to 100 points where z values are 3D
我发现自己遇到了很大的问题。我的数学一般,我需要解决一些问题,这在互联网上不是很全面。
我的问题:我有 2D space 由 X 和 Y 定义。这个 space 只是一个绘图 space。我想为特定的 Xs、Ys 分配具有 RGB 值的颜色。
所以假设我有 4 个点,在 XY 中定义了位置,在 Z 中定义了颜色:
- [0,0, [255,0,0]]
- [0,10, [0,255,0]]
- [10,10,[0,0,255]]
- [5,5, [0,0,0]]
我的绘图 space 是 xy: 15x15。
我想把颜色分配给所有的空点
对我来说这是个棘手的问题,因为 Z 轴本身基本上是 3D space。
我的全部意图是创建一个颜色图,其中点 1、2、3、4 在它们之间平滑过渡。
我能够在 1D 中解决这个问题,其中过渡在 2 点之间。但是我需要根据这 4 个点的拟合表面在 XY 绘图 space 中创建 2D 颜色图,这在某种程度上取决于 3D-RGB 的 space 和 XY 绘图中它们之间的距离 space。
在此先感谢您的帮助
你没有展示任何算法或代码,所以我只解释一个高级算法。如果您需要更多细节或代码或数学公式,请展示更多您自己的作品然后询问。您没有解释 "smooth transition" 的含义——有多种含义。这将导致连续着色,但可能不够平滑,无法达到您的目的。
首先,根据您在矩形绘图 space 中的点,找到这些点的 Voronoi diagram。这会将绘图 space 分成凸多边形,每个多边形围绕您的一个点。
对于 Voronoi 图中的每个 顶点,计算哪些点最接近顶点——通常只有三个点,但也可能有更多。然后在该顶点处,分配作为附近给定点的 RGB 值的平均值的颜色。即分别对R值和G值、B值进行平均。
对于 Voronoi 多边形 edge 上的任何点,其颜色是端点处两种颜色的加权平均值。 IE。如果该点距一端距离的三分之一,则其 RGB 值是距端点值距离的三分之一。
最后,对于内部 Voronoi 多边形的任何点,计算从定义该多边形("center point")的点到您正在查看的当前点的射线在。找到该射线与多边形相交的位置。 RGB 值就是中心点和多边形交点的值的加权平均值。
最难的部分是找到 Voronoi 图。 Fortune's algorithm 可以在合理的时间内完成。您或许可以找到一个库,用您选择的编程语言为您做这件事。
另一种算法是从triangulation of your given points和绘图区域的角开始。那么三角形中任意一点的颜色就是顶点颜色的加权平均。对于三角形的顶点或边上的点,这将自动保持一致,因此这可能比我以前的算法更简单。这里的难点在于找到一个三角剖分(任何一个都可以)。
我发现自己遇到了很大的问题。我的数学一般,我需要解决一些问题,这在互联网上不是很全面。
我的问题:我有 2D space 由 X 和 Y 定义。这个 space 只是一个绘图 space。我想为特定的 Xs、Ys 分配具有 RGB 值的颜色。
所以假设我有 4 个点,在 XY 中定义了位置,在 Z 中定义了颜色:
- [0,0, [255,0,0]]
- [0,10, [0,255,0]]
- [10,10,[0,0,255]]
- [5,5, [0,0,0]]
我的绘图 space 是 xy: 15x15。 我想把颜色分配给所有的空点
对我来说这是个棘手的问题,因为 Z 轴本身基本上是 3D space。
我的全部意图是创建一个颜色图,其中点 1、2、3、4 在它们之间平滑过渡。 我能够在 1D 中解决这个问题,其中过渡在 2 点之间。但是我需要根据这 4 个点的拟合表面在 XY 绘图 space 中创建 2D 颜色图,这在某种程度上取决于 3D-RGB 的 space 和 XY 绘图中它们之间的距离 space。
在此先感谢您的帮助
你没有展示任何算法或代码,所以我只解释一个高级算法。如果您需要更多细节或代码或数学公式,请展示更多您自己的作品然后询问。您没有解释 "smooth transition" 的含义——有多种含义。这将导致连续着色,但可能不够平滑,无法达到您的目的。
首先,根据您在矩形绘图 space 中的点,找到这些点的 Voronoi diagram。这会将绘图 space 分成凸多边形,每个多边形围绕您的一个点。
对于 Voronoi 图中的每个 顶点,计算哪些点最接近顶点——通常只有三个点,但也可能有更多。然后在该顶点处,分配作为附近给定点的 RGB 值的平均值的颜色。即分别对R值和G值、B值进行平均。
对于 Voronoi 多边形 edge 上的任何点,其颜色是端点处两种颜色的加权平均值。 IE。如果该点距一端距离的三分之一,则其 RGB 值是距端点值距离的三分之一。
最后,对于内部 Voronoi 多边形的任何点,计算从定义该多边形("center point")的点到您正在查看的当前点的射线在。找到该射线与多边形相交的位置。 RGB 值就是中心点和多边形交点的值的加权平均值。
最难的部分是找到 Voronoi 图。 Fortune's algorithm 可以在合理的时间内完成。您或许可以找到一个库,用您选择的编程语言为您做这件事。
另一种算法是从triangulation of your given points和绘图区域的角开始。那么三角形中任意一点的颜色就是顶点颜色的加权平均。对于三角形的顶点或边上的点,这将自动保持一致,因此这可能比我以前的算法更简单。这里的难点在于找到一个三角剖分(任何一个都可以)。