เมื่อฉันต้องการการประมาณค่าความโค้งของตาข่ายสำหรับสกินเชดเดอร์
ก่อนอื่นฉันคำนวณความโค้งแบบสเกลาร์สำหรับแต่ละขอบในตาข่าย หากขอบมีตำแหน่งและ normalsดังนั้นฉันประเมินความโค้งเป็น:n 1 , n 2พี1, p2n1, n2
ความโค้ง= ( n2- n1) ⋅ ( p2- หน้า1)|พี2-หน้า1|2
สิ่งนี้จะคำนวณความแตกต่างในรูปแบบปกติที่ฉายไปตามขอบซึ่งเป็นเศษส่วนของความยาวของขอบ (ดูด้านล่างสำหรับวิธีฉันมากับสูตรนี้)
จากนั้นสำหรับแต่ละจุดสุดยอดฉันดูที่ความโค้งของขอบทั้งหมดที่สัมผัสมัน ในกรณีของฉันฉันแค่ต้องการประมาณค่าสเกลาร์ของ "ความโค้งเฉลี่ย" ดังนั้นฉันจึงลงเอยด้วยการใช้ค่าเฉลี่ยทางเรขาคณิตของค่าสัมบูรณ์ของความโค้งของขอบทั้งหมดในแต่ละจุดยอด สำหรับกรณีของคุณคุณอาจพบความโค้งต่ำสุดและสูงสุดและนำขอบเหล่านั้นไปเป็นทิศทางความโค้งหลัก (อาจเป็นการเปลี่ยนมุมฉากของพวกมันด้วยจุดยอดปกติ) ค่อนข้างหยาบ แต่อาจให้ผลลัพธ์ที่ดีพอสำหรับสิ่งที่คุณต้องการ
แรงจูงใจสำหรับสูตรนี้คือการดูว่าเกิดอะไรขึ้นในแบบ 2D เมื่อใช้กับวงกลม:
สมมติว่าคุณมีวงกลมรัศมี (เพื่อความโค้งของมันคือ ) และคุณมีจุดสองจุดบนวงกลมที่มีภาวะปกติของพวกเขาn_2 ตำแหน่งของจุดสัมพันธ์กับจุดศูนย์กลางของวงกลมจะเป็นและเนื่องจากคุณสมบัติที่วงกลมหรือทรงกลมชี้ตรงออกจากจุดศูนย์กลางเสมอ1 / r n 1 , n 2 p 1 = r n 1 p 2 = r n 2R1 / rn1, n2พี1= r n1พี2= r n2
ดังนั้นคุณสามารถกู้รัศมีได้เป็นหรือ. แต่โดยทั่วไปตำแหน่งจุดสุดยอดจะไม่สัมพันธ์กับจุดศูนย์กลางของวงกลม เราสามารถแก้ไขได้โดยการลบสอง:
| หน้า2 | / | ไม่มี2 | หน้า2 - หน้า1r = | พี1| / | n1|| พี2| / | n2|
พี2- หน้า1Rความโค้ง= 1R= r n2- r n1= r ( n2- n1)= | พี2- หน้า1|| n2- n1|= | n2- n1|| พี2- หน้า1|
ผลลัพธ์จะถูกต้องเฉพาะกับแวดวงและทรงกลมเท่านั้น อย่างไรก็ตามเราสามารถขยายเพื่อให้ "อดทน" อีกเล็กน้อยและใช้กับตาข่าย 3D โดยพลการและดูเหมือนว่าจะทำงานได้ดีพอสมควร เราสามารถทำให้สูตรมากขึ้น "ใจกว้าง" เป็นครั้งแรกโดยการฉายเวกเตอร์สู่ทิศทางของขอบที่P_1 วิธีนี้ช่วยให้เวกเตอร์สองตัวนี้ไม่ขนานกันอย่างแน่นอน (เหมือนในกรณีวงกลม); เราจะฉายส่วนประกอบใด ๆ ที่ไม่ขนานกัน เราสามารถทำสิ่งนี้ได้ด้วยการกระจายเวกเตอร์ขอบ:
p 2 - p 1 ความโค้งn2- n1พี2- หน้า1
ความโค้ง= ( n2- n1)⋅normalize(p2−p1)|p2−p1|=(n2−n1)⋅(p2−p1)/|p2−p1||p2−p1|=(n2−n1)⋅(p2−p1)|p2−p1|2
อีกครั้ง, มีสูตรที่ปรากฏที่ด้านบนของคำตอบนี้. ข้อดีข้างเคียงที่ดีของการใช้โปรเจคชั่นที่เซ็นชื่อ (ผลิตภัณฑ์ดอท) คือสูตรนั้นให้ความโค้งที่มีลายเซ็น: บวกสำหรับนูนและลบสำหรับพื้นผิวเว้า
อีกวิธีที่ฉันสามารถจินตนาการได้ แต่ไม่ได้ลองคือการประมาณรูปแบบพื้นฐานที่สองของพื้นผิวในแต่ละจุดยอด สิ่งนี้สามารถทำได้โดยการตั้งค่าพื้นฐานแทนเจนต์ที่จุดสุดยอดจากนั้นแปลงจุดยอดที่อยู่ใกล้เคียงทั้งหมดเป็นพื้นที่แทนเจนต์นั้นและใช้กำลังสองน้อยที่สุดเพื่อหาเมทริกซ์ 2FF ที่ดีที่สุด จากนั้นทิศทางความโค้งหลักจะเป็นค่าเฉพาะของเมทริกซ์นั้น สิ่งนี้น่าสนใจเพราะคุณสามารถหาทิศทางความโค้ง "โดยนัย" ของจุดยอดที่อยู่ใกล้เคียงโดยไม่มีขอบใด ๆ ชี้ไปในทิศทางนั้นอย่างชัดเจน แต่ในทางกลับกันก็คือรหัสที่มากขึ้นการคำนวณที่มากขึ้น
กระดาษที่ใช้วิธีนี้คือRusinkiewicz "ประมาณโค้งและอนุพันธ์ของพวกเขาในสามเหลี่ยมตาข่าย" มันทำงานได้โดยการประมาณเมทริกซ์ 2FF ที่ดีที่สุดต่อสามเหลี่ยมแล้วเฉลี่ยเมทริกซ์ต่อจุดสุดยอด (คล้ายกับวิธีการคำนวณบรรทัดฐานแบบเรียบ)