اكتشف وابحث عن شعاع التقاطع مقابل مثلث بيزييه المكعب

StackOverflow https://stackoverflow.com/questions/2457614

سؤال

أثناء كتابة محرر نماذج ، إلى جانب تمكين Raytracing ، يمكنني التفكير في بعض العمليات حيث أود أن أجد تقريب جيد للغاية حول نقطة التقاطع بين شعاع وتصحيح Bezier الثلاثي.

كيف نفعل ذلك؟ أنا أعرف بطريقتين ولكن من المحتمل أن يكون هناك أفضل.

حالات الاستخدام الدقيقة: قد أرغب في استخدام تصحيح Triangle Bezier واحد كسطح مرجعي لرسم أشكال مفصلة بالماوس. قد أرغب أيضًا في تحديد نقطة تقسيم من هذا التصحيح.

إذا كان هناك رمز مصدر C لذلك ، فقد أرغب في رؤية ذلك أيضًا. ربما حتى استخدامه بدلاً من لف الكود الخاص بي.

هل كانت مفيدة؟

المحلول

أقترح أن تنفذ لقطة بيزيير الثلاثي (بي دي إف).

ومع ذلك ، هناك احتمال آخر هو تحويل التصحيح الثلاثي الخاص بك إلى تصحيح Bezier Product. تتمثل ميزة القيام بذلك في أن هناك الكثير من الدعم لـ Beziers بمنتج تنسور ، لذا فمن الأرجح أن تجد بعض التعليمات البرمجية التي يمكنك استخدامها. التحويل بسيط:

  • عرض التصحيح الثلاثي الخاص بك كسلسلة من صفوف N+1 من نقاط التحكم (حيث N هي الدرجة)
    • يحتوي الصف الأول على نقطة تحكم واحدة ، ولكل صف نقطة تحكم واحدة أكثر من الأخير
  • الآن ، تعامل مع كل صف باعتباره منحنى بيزير من الدرجة المناسبة (الدرجة 0 إلى درجة N)
  • درجة رفع كل صف إلى درجة ن
    • سيكون لكل صف الآن نقاط تحكم N+1 ، مما يشكل N+1 بواسطة شبكة التحكم N+1
  • هذه الشبكة من النقاط ، التي يتم أخذها كدرجة N بواسطة N Bezier Patch ، هي سطح متطابق للمثلث الخاص بك

للعثور على نقاط التقاطع ، يجب أن يعمل هذا بشكل جيد. ومع ذلك ، فإن تصحيح منتج الموتر الخاص بك يتدهور (لديك نقاط متزامنة في نهاية واحدة) لذلك قد تجد أنك تقدم بعض المشكلات العددية وأنت تقترب من الزاوية المتدهورة. أيضًا ، قد يجعل التعيين مرة أخرى إلى المجال الثلاثي أشياء مثل رسم خرائط للملمس صعبة للغاية. لذلك أقترح عليك استخدام قصاصات Bezier الأكثر مباشرة إذا كنت لا تمانع في التنفيذ.

نصائح أخرى

لست على دراية بتصحيح Bezier الثلاثي ، ولكن إذا كان يمكن احتواءها دائمًا داخل مثلث ثم ، إذا تقاطع الأشعة المثلث ، فيجب أن يتقاطع مع المنحنى بداخله أيضًا.

إذا كان ما سبق صحيحًا ، فيمكنك البحث في المنحنى بين الرأسين اللذين يتقاطع جانبهما إلى نقطة قريبة بما يكفي من الشعاع. أعتقد أنه يمكنك إجراء بحث ثنائي على معلمة المنحنى في هذه المنطقة للحصول على هذه النقطة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top