ข้อมูลพื้นฐานเกี่ยวกับ B-spline (NURBS) แบบไม่สมเหตุสมผล


9

ฉันพยายามที่จะเข้าใจเส้นโค้ง NURBS (พื้นผิวในภายหลัง!) แต่ฉันมีปัญหาบางอย่างในการทำความเข้าใจพื้นฐานการทำงานภายในของมัน มีคนช่วยอธิบายสิ่งต่าง ๆ ให้ฉันหน่อยได้ไหม? เมื่อฉันมาจากเส้นโค้ง Bezier การเปรียบเทียบระหว่างสองสิ่งนี้จะเป็นประโยชน์อย่างยิ่ง

  1. "ฟังก์ชั่นพื้นฐานที่มีเหตุผล"ดูเหมือนเล็กน้อยเช่น Bernstein พหุนาม (เหตุผล) Bezier โค้ง พารามิเตอร์เปลี่ยนuจาก 0 เป็น 1 หรือไม่

  2. วิธี "เพิ่มรายละเอียด" ลงในกราฟ ฉันหมายถึงด้วยเบซิเยร์ถ้าฉันต้องการอธิบายรูปร่างที่ซับซ้อนมากขึ้นฉันก็แค่ "เย็บ" Beziers หลาย ๆ ตัวเข้าด้วยกัน หรือน้อยกว่านั้นเพิ่มระดับ ฉันเข้าใจว่าฉันสามารถเพิ่มระดับของ NURBS ได้เช่นกันและใส่ NURBS curves หลายแบบเคียงข้างกัน แต่นี่เป็นวิธีที่ควรทำหรือไม่

  3. อย่างน้อยบทความของฉันใน Wikipedia ดูเหมือนจะไม่ชัดเจนเกี่ยวกับ "knot vector" นี้ อะไรกันล่ะ?


นี่เป็นสิ่งที่มากเกินไปสำหรับคำถามหนึ่งข้อ ฉันสามารถใช้การบรรยายเบื้องต้นเกี่ยวกับหัวข้อในเวลาไม่กี่ชั่วโมง การเข้าไปดูรายละเอียดการใช้ De casteljanu และอัลกอริทึมของ de boor จะใช้เวลามากเกินไป
joojaa

1
ดังนั้นฉันอยากเห็นคำถาม 3, 5 และ 6 อาจแยกเป็นคำถามแยกต่างหากเพื่อให้ตอบและเข้าใจขนาดของอาหารมากขึ้น
joojaa

@joojaa แน่นอนว่าฉันสามารถแบ่งคำถามเพียงวินาที ...
Ecir Hana

1
ดังนั้นคำถามที่3 , 5และ6จึงถูกแยกออกเป็นคำถามแยกต่างหาก
Ecir Hana

คำตอบ:


7

B-Splines และ Beziers เป็นสิ่งประดิษฐ์คู่ขนานของสิ่งเดียวกันไม่มากก็น้อย ที่เบซิเอร์พยายามที่จะเริ่มต้นจากความคิดของการปรับแทนเจนต์ที่เหมาะสม B-Splines เริ่มต้นด้วยแนวคิดของฟังก์ชั่นพื้นฐาน NURB Splines (หรือส่วนที่มีเหตุผลในความเป็นจริง) เป็นเพียงภาพรวมของ B-Splines เพื่อให้คุณสามารถอธิบายส่วนที่เป็นรูปกรวยได้อย่างแม่นยำ * เนื่องจากเป็นส่วนที่สนใจในงานวิศวกรรมเป็นพิเศษ

ก่อนอื่นให้เราเริ่มด้วยคำศัพท์ NURB Spline ง่ายๆ เหตุผลของเส้นโค้งเหล่านี้แตกต่างจาก Beziers เล็กน้อย ครั้งแรกที่มีแนวคิดของการเป็นช่วง ช่วงจะเท่ากับคร่าวๆ Bezier ทั้งหมดยกเว้นใน nurb คุณสามารถมีช่วงใด ๆ

ป้อนคำอธิบายรูปภาพที่นี่

ภาพที่ 1 : หนึ่งช่วง NURBS ลูกบาศก์ นี่เป็นสูตรที่ผิดปกติเล็กน้อย

แต่ละช่วงจะเกิดขึ้นจากระดับความโค้ง + 1 จุดควบคุม ** แต่ละเส้นโค้งอาจประกอบด้วยจำนวนจุดใด ๆ แต่ละช่วงต่อเนื่องกันจะนำคะแนนไปสู่ช่วงก่อนหน้านี้อีกครั้งโดยวางหนึ่งจุดและเพิ่มอีกหนึ่งจุดในรายการ ดังนั้นการสร้างเส้นโค้งที่ซับซ้อนมากขึ้นนั้นง่ายพอ ๆ กับการต่อท้ายจุดต่าง ๆ ให้มากขึ้น

หมายเหตุ : เส้นโค้งภาพเป็นสิ่งที่ผิดปกติเล็กน้อยผิดปรกติอธิบายว่านี่หมายถึงอะไรในส่วนถัดไป เมื่อฉันนำแนวคิดของนอตขึ้น นี่เป็นวิธีที่ง่ายกว่าในการอธิบายวิธีการโค้งกาวเข้าด้วยกัน

ป้อนคำอธิบายรูปภาพที่นี่

Image 2 : 2 ลูกบาศก์เมตรหลังจากแต่ละช่วงแต่ละช่วงใช้ 4 คะแนน พวกมันรวมกันเป็นเส้นโค้งเดียว พวกเขาแบ่งปันคะแนนมากที่สุดด้วยกัน

ถึงตอนนี้เราอาจตอบคำถาม 2 ข้อเกี่ยวกับการเพิ่มความซับซ้อน แต่ฉันอยากจะเพิ่มว่าโครงการนี้ช่วยให้มั่นใจต่อเนื่องดีกว่าเส้นโค้ง bezier นอกจากนี้คุณสามารถสร้างอาเรย์จุดที่เป็นตัวเรือได้ การขึ้นรูปโค้งปิด

ป้อนคำอธิบายรูปภาพที่นี่

Image 3 : พื้นผิว NURBS ลูกบาศก์ปิดมีช่วงครอบคลุมมากที่สุดเท่าที่มีจุด แต่ละสีมีหนึ่งช่วง

และตัวแปร

จนถึงจุดนี้ใคร ๆ ก็สามารถพูดได้ว่าการคบกันถึงช่วงนั้นเป็นกลอุบายเช่นเดียวกับ "การเย็บ" โค้ง Bezier แต่มีความแตกต่าง เส้นโค้งถูกทำให้เป็นเส้นตรงตามความยาวของมัน ดังนั้นเส้นโค้งจึงไม่แยกจากกันพวกมันไม่ได้ทำการแทรกแบบฟอร์ม 0 ถึง 1 ในแต่ละช่วงเหมือนกับที่ Beziers ทำ เส้นโค้งที่ขีดเส้นใต้นั้นมีช่วงพารามิเตอร์ cusomizable แทน พารามิเตอร์ถูกเก็บไว้ในสิ่งที่เรียกว่าปมและแต่ละปมสามารถมีค่าเพิ่มขึ้นโดยพลการในลำดับ ดังนั้นคุณสามารถทำให้เส้นโค้งทั้งหมดมีค่า u ถึง 0 - 1 หรือ 0 ถึง 12 ได้การตั้งพาราเมทริกก็ไม่จำเป็นต้องเหมือนกัน

การเปลี่ยนแปลงครั้งนี้ทำให้เกิดการเปลี่ยนแปลงรูปร่างของเส้นโค้ง ทำไมสิ่งนี้ถึงมีประโยชน์ คุณสามารถปรับความตึงตามแนวโค้งได้ หรือคุณสามารถเข้ารหัสความยาวของส่วนโค้งให้เป็นพารามิเตอร์ U การใช้งานที่แปลกประหลาดอย่างหนึ่งคือการทำให้เส้นโค้ง NURBS ทำตัวเหมือนเส้นโค้ง Bezier ไม่ว่าทั้งหมดหรือเพียงบางส่วน (bezier เหมือนในตอนท้าย

ป้อนคำอธิบายรูปภาพที่นี่

ภาพที่ 4 : จุดเดียวกันต่างกันเป็นปม เส้นโค้ง NURBS สีเขียวสอดคล้องกับเส้นโค้ง Bezier ที่มีช่วงพารามิเตอร์ 0-2 แทน 0-1

โอเคอะไรคือปม มันเป็นเพียงช่วงของฟังก์ชั่นพื้นฐาน เนื่องจากลูกบาศก์ b-spline ที่มี 4 คะแนนมีฟังก์ชันการแก้ไข 4 แบบจึงต้องใช้ 8 นอต เฉพาะพื้นที่ที่มี 3 ฟังก์ชั่นทับซ้อนและรวมได้มากถึง 1.0 สามารถลากเส้นได้

ป้อนคำอธิบายรูปภาพที่นี่

Image 5 : 2 ฟังก์ชั่นพื้นฐานที่แตกต่าง, bezier like และ parametrisation เซ็กเมนต์ที่เหมือนกัน, แพร่กระจายไปยังช่วง 0-1

และตอนนี้เราได้อธิบายคำตอบสำหรับคำถามที่ 1 ช่วงที่ไม่ได้กำหนดไว้คุณสามารถยืดฟังก์ชั่นพื้นฐานตามที่คุณเห็นว่าเหมาะสม และในที่สุดเวกเตอร์ปมก็สร้างช่วงพารามิเตอร์สำหรับฟังก์ชันพื้นฐาน ยังมีอีกสิ่งหนึ่งที่ควบคุมรูปร่างของเส้นโค้งและนั่นคือเวกเตอร์น้ำหนัก แต่นั่นเป็นอีกเรื่องที่ต้องบอกในที่อื่น


* เหตุผลนี้ในกรณีนี้หมายความว่าเส้นโค้ง NURBS ไม่จำเป็นต้องเป็นพหุนามเนื่องจากคุณไม่สามารถอธิบายวงกลมด้วยชื่อพหุนามได้

** สามารถกำหนดคะแนนประเภทอื่นได้


เกี่ยวกับ (*), Bezier curves มีปัญหาเดียวกัน ปัญหาคือว่าเส้นโค้ง (ในทั้งสองกรณี) ถูกกำหนดเป็น x = f (t), y = f (t) อย่างไรก็ตามคุณยังสามารถกำหนดเส้นโค้งแบบไม่มีการเปลี่ยนแปลง / ชัดเจน / 1 มิติ (อีกครั้งในทั้งสองกรณี) เป็น y = f (x) โดยใช้ x แทน t ในกรณีของเส้นโค้งแบบมีเหตุผล, แทนที่จะเป็นส่วนที่มีรูปกรวยคุณสามารถเป็นตัวแทนของไซน์และโคไซน์ (และอื่น ๆ ) NURBS / b-splines ไม่ได้มีความพิเศษในเรื่องนั้น
Alan Wolfe

ฉันคิดว่าข้อความของคุณเกี่ยวกับความยาวนั้นผิด (ใช้ได้กับฟังก์ชันเชิงเส้นเท่านั้น) และไม่แน่ใจว่าการคำนวณความยาวควรจะพอดีกับคำอธิบายของคุณอย่างไร (ข้อมูลที่ดีที่คุณให้มาเพียงแค่บอกว่า!)
Alan Wolfe

@AlanWolfe ลบต่อไป
joojaa

ยอดเยี่ยมที่สุด! ขอบคุณมากคำอธิบายที่ดีมาก!
Ecir Hana

บางทีสะกดผิด? "พื้นผิวที่อยู่ข้างใต้นั้นมีช่วงของพารามิเตอร์ที่ปรับแต่งได้พารามิเตอร์จะถูกเก็บไว้ในสิ่งที่เรียกว่าปมและแต่ละปมสามารถมีค่าตามอำเภอใจที่ใหญ่กว่าถัดไป" -> "แทนที่จะเป็นเส้นโค้งพื้นฐานที่มีช่วงพารามิเตอร์ที่ปรับแต่งได้พารามิเตอร์จะถูกเก็บไว้ในสิ่งที่เรียกว่าปมและแต่ละปมสามารถมีค่าตามอำเภอใจที่ใหญ่กว่าครั้งก่อน " Btw. คุณช่วยอธิบายความหมายของ "ช่วง UV" ได้ไหม? "UV" แสดงถึง 2D .. ?
Ecir Hana
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.