Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimana untuk Mengira Data dengan Lengkung Bezier Kubik Berbilang Segmen Terkandas oleh Jarak dan Kelengkungan?

Bagaimana untuk Mengira Data dengan Lengkung Bezier Kubik Berbilang Segmen Terkandas oleh Jarak dan Kelengkungan?

Barbara Streisand
Barbara Streisandasal
2024-10-21 08:30:03683semak imbas

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

Menghampirkan Data dengan Keluk Bezier Kubik Berbilang Segmen dengan Jarak dan Kekangan Kelengkungan

Pernyataan Masalah:

Matlamatnya adalah untuk menganggarkan titik data geografi yang diberikan dengan lengkung Bezier padu berbilang segmen di bawah dua kekangan:

  1. Jarak maksimum antara lengkung dan titik data tidak boleh melebihi toleransi yang ditentukan.
  2. Lengkungan lengkung mestilah tidak melebihi ketajaman tertentu.

Penyelesaian:

Penyelesaian dua langkah dicadangkan:

  1. Buat Penghampiran B-Spline:

    • Gunakan perpustakaan FITPACK (diakses melalui scipy Python binding) untuk menjana B- spline yang mempunyai kuasa dua terkecil sesuai dengan titik data.
    • B-splines membenarkan untuk menentukan kelancaran dan menyediakan cara untuk memenuhi kekangan kelengkungan.
  2. Tukar B-Spline kepada Bezier Curve:

    • Gunakan fungsi seperti yang disediakan dalam teks penyelesaian untuk menukar B-spline kepada lengkung Bezier berbilang segmen.
    • Keluk Bezier yang ditukar mewarisi sifat kelicinan dan kelengkungan B-spline.

Contoh Kod:

Berikut ialah coretan Python yang menunjukkan pendekatan:

<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>

Nota:

Penyelesaian mengutamakan kelancaran daripada ketepatan. Untuk anggaran yang lebih ketat, mungkin perlu menukar sedikit kelancaran untuk memastikan kekangan jarak dipenuhi.

Atas ialah kandungan terperinci Bagaimana untuk Mengira Data dengan Lengkung Bezier Kubik Berbilang Segmen Terkandas oleh Jarak dan Kelengkungan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn