ホームページ  >  記事  >  バックエンド開発  >  距離と曲率によって制約された複数セグメントの 3 次ベジェ曲線でデータを近似するにはどうすればよいですか?

距離と曲率によって制約された複数セグメントの 3 次ベジェ曲線でデータを近似するにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-10-21 08:30:03584ブラウズ

How to Approximate Data with a Multi-Segment Cubic Bezier Curve Constrained by Distance and Curvature?

距離と曲率制約を使用したマルチセグメント 3 次ベジェ曲線によるデータの近似

問題ステートメント:

目標は、次の 2 つの制約の下で、複数セグメントの 3 次ベジェ曲線を使用して、指定された地理データ ポイントを近似することです。

  1. 曲線とデータ ポイント間の最大距離は、指定された許容値を超えることはできません。
  2. 曲線の曲率は特定の鋭さを超えてはなりません。

解決策:

2 段階の解決策が提案されています。

  1. B-スプライン近似を作成します:

    • FITPACK ライブラリ (scipy Python バインディングを通じてアクセス) を使用して、B-最小二乗法がデータ ポイントに適合するスプライン。
    • B スプラインを使用すると、滑らかさを指定でき、曲率制約を満たす方法が提供されます。
  2. B スプラインをベジェ曲線に変換:

    • 解決策のテキストで提供されているような関数を使用して、B スプラインを複数セグメントのベジェ曲線に変換します。
    • 変換されたベジェ曲線は、B スプラインの滑らかさと曲率のプロパティを継承します。

コード例:

ここにありますアプローチを示す Python スニペット:

<code class="python">import matplotlib.pyplot as plt
import numpy as np
from scipy import interpolate

# Assume the data points are stored in lists x and y.

# Create B-spline approximation
tck, u = interpolate.splprep([x, y], s=3)  # Adjust s parameter for smoothness

# Generate new parameter values for plotting
unew = np.arange(0, 1.01, 0.01)

# Evaluate B-spline at new parameter values
out = interpolate.splev(unew, tck)

# Convert B-spline to Bezier curve
bezier_points = b_spline_to_bezier_series(tck)

# Plot the data points, B-spline, and Bezier curve
plt.figure()
plt.plot(x, y, out[0], out[1], *bezier_points)  # Replace * with individual Bezier curves
plt.show()</code>

注:

このソリューションでは、精度よりも滑らかさを優先します。より厳密な近似の場合、距離の制約が確実に満たされるように、ある程度の滑らかさをトレードオフする必要がある場合があります。

以上が距離と曲率によって制約された複数セグメントの 3 次ベジェ曲線でデータを近似するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。