خوارزمية رسم الخطوط

خطان مُرَسَّمان. تظهر البكسلات الملونة على شكل دوائر. في الأعلى: حجب أحادي اللون؛ في الأسفل: تنعيم الحواف بتقنية غوبتا-سبرول؛ يُعتبر الخط المثالي هنا سطحًا.

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

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

خوارزميات رسم الخطوط أحادية اللون

خطوط باستخدام خوارزمية الخطوط الخاصة بـ Xiaolin Wu ، تظهر مظهرًا "حبليًا".

تعتمد خوارزميات رسم الخطوط أحادية اللون على رسم خطوط بلون واحد في المقدمة على خلفية. وهي مناسبة تمامًا للاستخدام مع الشاشات أحادية اللون.

تُحدد عادةً نقطتا بداية ونهاية الخط المطلوب بإحداثيات عددية صحيحة، بحيث تقعان مباشرةً على النقاط التي يأخذها الخوارزمية في الاعتبار. ولهذا السبب، تُصاغ معظم الخوارزميات فقط لمثل هذه النقاط.

طرق بسيطة

أبسط طريقة لرسم خط تتضمن حساب مواقع البكسل مباشرةً من معادلة الخط. مع إعطاء نقطة بداية(x1،y1){\displaystyle (x_{1},y_{1})}ونقطة نهاية(x2،y2){\displaystyle (x_{2},y_{2})}، تحقق النقاط الواقعة على الخط المعادلةy=م(x-x1)+y1{\displaystyle y=m(x-x_{1})+y_{1}}، معم=ΔyΔx=y2-y1x2-x1{\displaystyle \textstyle m={\frac {\Delta y}{\Delta x}}={\frac {y_{2}-y_{1}}{x_{2}-x_{1}}}}يمثل ميل الخط. ويمكن رسم الخط بتقييم هذه المعادلة عبر حلقة بسيطة، كما هو موضح في الشفرة الزائفة التالية :

dx = x2 − x1 dy = y2 − y1 m = dy/dx لكل قيمة x من x1 إلى x2 ، قم بما يلي: ص = م × (س - س1) + ص1 plot(x, y)

هنا، تم ترتيب النقاط بالفعل بحيثx2>x1{\displaystyle x_{2}>x_{1}}.

هذه الخوارزمية بطيئة بشكل غير مبرر لأن الحلقة تتضمن عملية ضرب، وهي أبطأ بكثير من الجمع أو الطرح على معظم الأجهزة. يمكن تحقيق طريقة أسرع من خلال حساب الفرق بين خطوتين متتاليتين.

yأنا+1-yأنا{\displaystyle y_{i+1}-y_{i}\!}=(م(xأنا+1-x1)+y1)-(م(xأنا-x1)+y1){\displaystyle =(m(x_{i+1}-x_{1})+y_{1})-(m(x_{i}-x_{1})+y_{1})\!}
=م(xأنا+1-xأنا){\displaystyle =m(x_{i+1}-x_{i})\!}
=م{\displaystyle =m\!}.

لذلك، يكفي أن نبدأ من تلك النقطة(x1،y1){\displaystyle (x_{1},y_{1})}ثم قم بزيادةy{\displaystyle y}بواسطةم{\displaystyle m}مرة واحدة في كل تكرار للحلقة. تُعرف هذه الخوارزمية باسم محلل التفاضل الرقمي .

بسبب التقريبy{\displaystyle y}التقريب إلى أقرب عدد صحيح يعادل التقريبy+0.5{\displaystyle y+0.5}يمكن تجنب التقريب باستخدام متغير تحكم إضافي يتم تهيئته بالقيمة 0.5.م{\displaystyle m}تُضاف قيمة هذا المتغير إلى كل تكرار. ثم، إذا تجاوزت قيمة هذا المتغير 1.0،y{\displaystyle y}يتم زيادة قيمة المتغير بمقدار 1، بينما يتم إنقاص قيمة متغير التحكم بمقدار 1. يسمح هذا للخوارزمية بتجنب التقريب واستخدام عمليات الأعداد الصحيحة فقط. مع ذلك، بالنسبة للأسطر القصيرة، لا تعوض هذه الحلقة الأسرع عن عملية القسمة المكلفة.م=ΔyΔx=y2-y1x2-x1{\displaystyle \textstyle m={\frac {\Delta y}{\Delta x}}={\frac {y_{2}-y_{1}}{x_{2}-x_{1}}}}، وهو أمر لا يزال ضرورياً في البداية.

تعمل هذه الخوارزمية بشكل جيد عندمادxدy{\displaystyle dx\geq dy}(أي أن الميل أقل من أو يساوي 1)، ولكن إذادx<دy{\displaystyle dx<dy}(أي، ميل أكبر من 1)، يصبح الخط متفرقًا جدًا مع وجود العديد من الفجوات، وفي الحالة الحدية لـدx=0{\displaystyle dx=0}سيحدث استثناء القسمة على صفر .

مشاكل

في بعض الحالات، تواجه خوارزميات رسم الخطوط أحادية اللون مشاكل:

سطوع غير متناسق

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

قص

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

التنعيم

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

خوارزمية غوبتا وسبراول

تعتمد خوارزمية غوبتا-سبرول على خوارزمية بريسنهام للخطوط ولكنها تضيف خاصية منع التعرج .

يمكن كتابة نسخة محسّنة من خوارزمية غوبتا-سبرول بلغة شبه رمزية كما يلي:

DrawLine(x1, x2, y1, y2) { x = x1; y = y1; dx = x2 − x1; dy = y2 − y1; d = 2 * dy − dx; // المُمَيِّز // المسافة الإقليدية للنقطة (س، ص) من الخط (المُوَجَّه) D = 0؛ // المسافة الإقليدية بين النقطتين (x1, y1) و (x2, y2) الطول = الجذر التربيعي (dx * dx + dy * dy)؛ sin = dy / length; cos = dx / الطول؛ بينما (س <= س٢) { IntensifyPixels(x, y − 1, D + cos); IntensifyPixels(x, y, D); IntensifyPixels(x, y + 1, D − cos); س = س + 1 إذا كان (d <= 0) { D = D + sin; د = د + 2 * د ص؛ } آخر { D = D + sin − cos; d = d + 2 * (dy − dx)؛ y = y + 1; } } }

تأخذ الدالة IntensifyPixels(x,y,r) تحويل الخط الشعاعي وتضبط شدة البكسل (x,y) بقيمة متعددة الحدود التكعيبية التي تعتمد على مسافة البكسل r من الخط.

التحسينات

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

الطرق التقريبية

قدّم بوير وبوردان خوارزمية تقريبية لتلوين البكسلات الواقعة مباشرةً أسفل الخط المثالي. [ 1 ] يُظهر الخط المُصوَّر بهذه الطريقة بعض الخصائص المميزة التي يُمكن الاستفادة منها. على سبيل المثال، في مثل هذه الحالات، تكون أجزاء الخط دورية. ينتج عن ذلك خوارزمية أسرع بكثير من الخوارزميات الدقيقة، خاصةً للخطوط الطويلة. ولا يظهر أي تراجع في الجودة إلا على الخطوط ذات الانحدار المنخفض جدًا.

التوازي

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

توجد أيضًا خوارزميات لبنى المعالجات المتوازية الضخمة التي تضم آلاف المعالجات. في هذه الخوارزميات، يُخصص كل بكسل من شبكة البكسلات لمعالج واحد، والذي يقرر بدوره ما إذا كان ينبغي تلوين هذا البكسل أم لا. [ 3 ]

تم تطوير هياكل ذاكرة خاصة لتسريع الوصول إلى الذاكرة أثناء عملية التحويل إلى صورة نقطية. على سبيل المثال، قد تقسم هذه الهياكل الذاكرة إلى خلايا متعددة، تقوم كل منها برسم جزء من السطر بشكل مستقل. [ 4 ] كما يمكن دعم التحويل إلى صورة نقطية باستخدام تقنية منع التعرج بواسطة أجهزة مخصصة. [ 5 ]

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

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

انظر أيضاً

مراجع

  1. فينسنت بوير، جان جاك بوردان: الخطوط السريعة: طريقة امتداد بامتداد. منتدى رسومات الحاسوب 18، 3 (1999): 377-384 ( مؤرشف في 23 أبريل 2024 على ai.univ-paris8.fr (خطأ: عنوان URL للأرشيف غير معروف) )
  2. روبرت ف. سبرول: استخدام تحويلات البرامج لاستنباط خوارزميات رسم الخطوط. معاملات ACM في الرسومات 1، 4 (أكتوبر 1982): 259-273، ISSN 0730-0301 
  3. أليكس ت. بانغ: خوارزميات رسم الخطوط للآلات المتوازية. مجلة IEEE لرسومات الحاسوب وتطبيقاتها 10، 5 (سبتمبر 1990): 54-59
  4. انظر على سبيل المثال: بير ماريس مارتي، أنطونيو ب. مارتينيز فيلاسكو: بنية الذاكرة لرسم الخطوط المتوازية بناءً على خوارزمية غير تزايدية. في: وقائع مؤتمر يوروميكرو 2000: المجلد 1، 266-273. مطبعة جمعية مهندسي الكهرباء والإلكترونيات، لوس ألاميتوس 2000، ISBN 0-7695-0780-8
  5. انظر على سبيل المثال: روبرت ماكنمارا، " خطوط مُفلترة مُسبقًا ومُضادة للتشويش باستخدام دوال المسافة في نصف المستوى". في وقائع مؤتمر HWWS 2000: 77-85. مطبعة ACM، نيويورك 2000، ISBN 1-58113-257-3
  6. تشنغفو ياو، جون ج. روكن: منهج الاستيفاء الخطي التكاملي لتصميم خوارزميات الخط التزايدي. مجلة الرياضيات الحسابية والتطبيقية 102، 1 (فبراير 1999): 3-19، ISSN 0377-0427 
  7. ميتشل أ. هاريس، إدوارد م. رينغولد: الرسم الخطي، والسنوات الكبيسة، وإقليدس. مجلة ACM Computing Surveys 36، 1 (مارس 2004): 68-80، ISSN 0360-0300 ( مؤرشف في 16 ديسمبر 2006 على emr.cs.iit.edu (خطأ: رابط الأرشيف غير معروف) )