【问题标题】:finding an equation of polynom by given point in 3D (python)通过3D中的给定点找到多项式方程(python)
【发布时间】:2022-07-22 00:20:23
【问题描述】:

假设我们有一条由 3D 点给出的曲线,例如:

(0.43, 0.55, 32.49), (0.61, 0.77, 31.24), (0.77, 1.01, 29.99), (0.88, 1.23, 28.75), (0.93, 1.41, 27.5), (0.91, 1.51, 26.25) , (0.90, 1.59, 25), (0.81, 1.60, 23.75), (0.68, 1.58, 22.5), (0.46, 1.52, 21.25)

我们试图弄清楚是否有一种方法可以通过 python 中的代码找到曲线的方程(它是系数和自变量),以便我们可以将这条曲线延续到我们想要的任何地方? 我们有一些想法可以通过使用 PCA 投影到 2d 然后进行回归来获得所需的结果,但结果很差

【问题讨论】:

  • 你能展示你尝试过的东西吗?
  • 您的实际问题是什么? “以某种方式我们可以将这条曲线延续到我们想要的任何地方”是什么意思?只需在现有点上再添加一个点,然后找到新的多项式?
  • 请提供足够的代码,以便其他人更好地理解或重现问题。

标签: python 3d equation curve points


【解决方案1】:

一种方法是以一个轴为基准,独立地拟合两组坐标。您可以在x_from_zy_from_z 中找到多项式系数。并且可以通过选择一个 z 值然后计算 y 值来计算新点,并且也可以使用这些值计算 x 值。

一个重要的警告:这适用于这个例子,但可能不适用于另一个。对于其他示例,您可能必须使用用作基数的变量(在这种情况下 z 效果最佳),以及 polyfit 函数的多项式的指数。

import matplotlib.pyplot as plt
import numpy as np


points = [
    (0.43, 0.55, 32.49),
    (0.61, 0.77, 31.24),
    (0.77, 1.01, 29.99),
    (0.88, 1.23, 28.75),
    (0.93, 1.41, 27.5),
    (0.91, 1.51, 26.25),
    (0.90, 1.59, 25),
    (0.81, 1.60, 23.75),
    (0.68, 1.58, 22.5),
    (0.46, 1.52, 21.25)
    ]

x = [point[0] for point in points]
y = [point[1] for point in points]
z = [point[2] for point in points]

x_from_z = np.poly1d(np.polyfit(z, x, 4))
y_from_z = np.poly1d(np.polyfit(z, y, 4))

z_new = np.linspace(20, 35, 100)
x_new = x_from_z(z_new)
y_new = y_from_z(z_new)


fig = plt.figure(figsize=(12, 12))
ax = fig.add_subplot(projection='3d')

ax.scatter(x, y, z)
ax.plot(x_new, y_new, z_new, c="k")

plt.show()

【讨论】:

  • x, y, z = list(zip(*points))解包点比较快
猜你喜欢
  • 1970-01-01
  • 2016-04-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-02
  • 2021-04-06
  • 1970-01-01
相关资源
最近更新 更多