Bayangkan jika anda hanya boleh menggunakan garis lurus, elips dan bulatan, bukankah sukar untuk mereka bentuk kereta dengan garis halus dan rupa yang kompleks?
Pada tahun 1962, jurutera Perancis Pierre Bézier menerbitkan lengkung Bézier, yang pada mulanya digunakan untuk reka bentuk badan utama kereta.
Lengkung Bézier boleh menentukan lengkung licin melalui satu siri titik kawalan. Lengkung sentiasa melalui titik kawalan pertama dan terakhir dan dipengaruhi oleh bentuk titik kawalan pertengahan. Selain itu, lengkung Bézier mempunyai sifat badan cembung.
Lengkung Bézier digunakan secara meluas dalam grafik komputer dan pemodelan imej, seperti dalam animasi, reka bentuk fon dan reka bentuk perindustrian.
Mari kita fahami ini.
P(t) mewakili titik pada lengkung pada t (t ialah pecahan, dengan nilai dari 0 hingga 1). Apakah titik pada lengkung pada t? Penerangan lengkung biasa ialah: y = f(x), dan buat masa ini, mari kita fahami P(t) sebagai f(x). Perbezaannya ialah P(t) ialah perwakilan parametrik (dan hasil pengiraan ialah "vektor" seperti [x, y]), yang akan diterangkan secara terperinci kemudian.
Seterusnya, Pi mewakili titik kawalan ke-i (i bermula dari 0). Mengambil contoh rajah di atas, terdapat 4 titik kawalan iaitu P0, P1, P2, P3. N dalam formula ialah indeks terakhir titik kawalan, iaitu, n = 3 (perhatikan bahawa ini bukan bilangan titik kawalan, tetapi kiraan tolak 1).
Bi,n(t) ialah fungsi asas Bernstein, juga dikenali sebagai fungsi asas. Bagi setiap spesifik (i, n), terdapat fungsi asas berbeza yang sepadan dengannya. Jika anda faham dari perspektif wajaran, anda boleh menganggap fungsi asas sebagai fungsi pemberat, menunjukkan "sumbangan" titik kawalan ke-i Pi kepada koordinat lengkung pada kedudukan t.
Formula untuk fungsi asas adalah seperti berikut:
(in ) Adakah nombor gabungan (berapa banyak cara untuk memilih i daripada n?). Mengenai mengapa fungsi asas kelihatan seperti ini, ia boleh difahami berkaitan dengan algoritma De Casteljau (lihat kemudian dalam teks)
Kembali kepada formula P(t), ∑ i=0n ialah simbol penjumlahan, menunjukkan bahawa bahagian berikutnya ( Bi,n(t) ⋅Pi ) hendaklah dijumlahkan daripada i=0 kepada i=n.
Mengambil gambar di atas sebagai contoh, dengan mengandaikan kita ingin mengira P(0.1), bagaimana untuk melakukannya? Ia dikembangkan seperti berikut:
Ganti t=0.1 untuk mendapatkan:
Di sini terus memetik artikel daripada netizen (pautan)
Jom fokus pada formula di atas.
Seperti yang ditunjukkan dalam rajah di atas, garis lurus yang kita kenali boleh difahami dari perspektif lain: menggunakan t (iaitu, panjang |AP| dari titik P ke titik yang diketahui (x0,y0)), maka titik P boleh ditentukan melalui fungsi trigonometri di atas.
Secara umum, ia boleh ditulis sebagai:
Di sini, P0 ialah vektor [x0,y0]dan v juga ialah vektor. Apabila ditambah bersama, P(t) ialah vektor [x,y].
Melihat bulatan sekali lagi:
Seperti yang ditunjukkan dalam rajah, bulatan boleh dilihat sebagai mempunyai pusat yang diketahui, dengan mana-mana titik pada bulatan ditentukan oleh sudut putaran dan jejari. Ia juga boleh ditulis sebagai:
Persamaan parametrik mengekalkan invarian geometri dan boleh mewakili bentuk seperti bulatan (dengan satu x sepadan dengan berbilang nilai y).
Algoritma De Casteljau ialah kaedah yang digunakan dalam aplikasi praktikal untuk menilai dan menganggarkan lengkung Bézier untuk lukisan dan operasi lain. Berbanding dengan kaedah penilaian berasaskan definisi sebelumnya, ia lebih cepat dan lebih stabil, serta lebih dekat dengan ciri-ciri lengkung Bézier.
Di sini, kami merujuk kepada dua artikel: pautan1 dan pautan2
Pertama, yang berikut ditakrifkan:
Lihat β di atas. Ia agak mengelirukan dengan superskrip dan subskrip; anda boleh menggunakan rekursi segi tiga berikut untuk memahami:
Tepi merah segi tiga dalam rajah di atas ialah titik kawalan bagi dua segmen dibahagikan dengan t0. Untuk memahami dengan lebih jelas t0, P(t0) (iaitu, β 0(n) ), titik kawalan kedua-dua lengkung, anda boleh merujuk kepada rajah berikut:
Rajah di atas menunjukkan hubungan antara pelbagai titik apabila t=0.5.
Dari perspektif "interpolasi," proses pengiraan juga boleh difahami sebagai:
Pada masa ini, dua kaedah diperhatikan.
Satu kaedah melibatkan merentasi t dari 0 hingga 1 dengan kenaikan langkah kecil(iaitu. 0.01). Setiap kali P(t) dicari, formula rekursif digunakan untuk menentukan β 0(n) .
Kaedah lain melibatkan mencari P(t=0.5), dan kemudian untuk dua lengkung terbahagi, P(t=0.5) dicari masing-masing... Pembahagian ini berterusan sehingga lengkung dianggarkan.
Selalu berasa tidak nyata untuk hanya menonton tanpa berlatih.
Jadi saya menulis kod pelaksanaan saya sendiri untuk lukisan lengkung dan menyusunnya ke dalam kit alat: Kit Alat Compilelife
Kod teras yang sepadan ada di sini
Atas ialah kandungan terperinci Hanya memahami lengkung Bézier.. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!