Rumah > Artikel > pembangunan bahagian belakang > Bagaimana untuk merancang badan cembung dalam Python?
ConvexHull ialah kelas dalam ruang Fungsi utamanya adalah untuk mencari tepi set titik dan membuat badan cembung. Parameter permulaan yang diperlukan ialah set titik, format set titik ialah tatasusunan dimensi n×m, n ialah bilangan titik dalam set titik dan m ialah dimensi titik.
from scipy.spatial import ConvexHull import matplotlib.pyplot as plt import numpy as np pts = np.random.rand(30, 2) hull = ConvexHull(pts) plt.plot(pts[:,0], pts[:,1], 'o') for i in hull.simplices: plt.plot(pts[i, 0], pts[i, 1], 'k-') plt.show()
di mana simplex
ialah nombor siri titik indeks Kesan selepas lukisan adalah seperti berikut
ConvexHull mempunyai dua parameter pilihan, antaranya. incremental ialah Parameter jenis Boolean, apabila Benar, membenarkan penambahan mata baharu.
Parameter khusus qhull_options boleh dilihat dalam qhull Hanya QG akan ditunjukkan di bawah.
QGn bermaksud menganggap titik ke-n sebagai titik cerapan Selepas membahagikan titik yang ditetapkan dengan badan cembung, jika bucu disambungkan dan digunakan sebagai dinding, maka titik cerapan boleh The. mata yang boleh dilihat ditandakan sebagai baik, dan kesannya adalah seperti berikut
pts = np.random.rand(1000, 2) # 添加一个观察点 pts = np.vstack([pts, np.array([[2,0.5]])]) hull = ConvexHull(pts, qhull_options='QG1000') plt.plot(pts[:,0], pts[:,1], '.') for i in hull.simplices: plt.plot(pts[i, 0], pts[i, 1], 'k-') for i in hull.simplices[hull.good]: plt.plot(pts[i, 0],pts[i, 1], lw=5) plt.show()
Kesannya adalah seperti yang ditunjukkan dalam rajah
Badan cembung dalam dua dimensi jelas sekali adalah rajah tertutup yang terdiri daripada garisan, manakala badan cembung dalam tiga dimensi secara semula jadi mestilah geometri tiga dimensi. Dikembangkan ke mana-mana dimensi, badan cembung sebenarnya adalah simpleks. Simplices dalam ConvexHull ialah titik yang membentuk simpleks dan diindeks dalam set asal. Contohnya adalah seperti berikut
pts = np.random.rand(30, 3) hull = ConvexHull(pts) ax = plt.subplot(projection='3d') ax.scatter(pts[:,0], pts[:,1], pts[:,2]) for i in hull.simplices: ax.plot_trisurf(pts[i, 0], pts[i, 1], pts[i,2], alpha=0.5) plt.show()
Parameter alfa digunakan untuk melaraskan ketelusan permukaan segi tiga, supaya titik di dalam badan cembung boleh dilihat melalui badan cembung.
Kesannya adalah seperti berikut
Konsep simpleks telah diperkenalkan sebelum ini, iaitu rajah yang terdiri daripada badan cembung ialah simpleks . Sebagai kes dua dimensi, badan cembung dikelilingi oleh segmen garisan, dalam kes tiga dimensi, badan cembung dikelilingi oleh satah, ia boleh dinyatakan sebagai simpleks yang membentuk badan cembung, dikelilingi; oleh hypersurfaces. Memandangkan konsep hypersurface tidak mempunyai sempadan, permukaan badan cembung dengan bucu dan tepi dirujuk sebagai hypersurface simpleks dalam perkara berikut.
Atribut yang biasa digunakan dalam kelas ConvexHull adalah seperti berikut
set titik titik yang dikelilingi oleh badan cembung
bucu simplex bucu pada titik Indeks berpusat
memudahkan bucu metasurface Simplex
jiran Indeks hipersurface bersebelahan metasurface
>>> hull.equations array([[-0.5509472 , 0.72386104, -0.41530999, -0.36369123], [-0.26155355, 0.16210178, -0.95147925, 0.02022163], [-0.99132368, -0.0460725 , 0.12310441, 0.045523 ], [-0.98526526, -0.07170442, 0.15527666, 0.04749854], [-0.15900968, -0.98529789, -0.06248198, 0.13294496], # .......
Atas ialah kandungan terperinci Bagaimana untuk merancang badan cembung dalam Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!