خوارزمية بريسنهام لبناء القطعة. خوارزمية بريسنهام لبناء الدائرة

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

رسم بياني 1. التحلل النقطي لقطاعات الخط.

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

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

تستخدم معظم خوارزميات رسم الخطوط خوارزمية خطوة بخطوة. فيما يلي مثال على هذه الخوارزمية:

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

الموقف = البداية

خطوة = زيادة

1. لوالموقف - النهاية< точность ثم 4

لوالموقف > النهاية ثم 2

لوموضع< конец ثم 3

2. الموضع = الموضع - الخطوة

3. الموضع = الموضع + الخطوة

4. ينهي

خوارزمية بريسنهام.

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

تم إنشاء الخوارزمية بطريقة لا تتطلب سوى التحقق من علامة هذا الخطأ. في الشكل 2، يتم توضيح ذلك للجزء الموجود في الثُمن الأول، أي. لقطعة ذات ميل يتراوح من 0 إلى 1. من الشكل يمكنك أن ترى أنه إذا كان ميل القطعة من النقطة (0,0) أكبر من 1/2، فإن التقاطع مع الخط x = 1 سيكون تكون أقرب إلى الخط y = 1 من الخط المستقيم y = 0. وبالتالي، فإن النقطة النقطية (1,1) تقترب بشكل أفضل من مسار المقطع من النقطة (1,0). وإذا كان الميل أقل من 1/2 فالعكس هو الصحيح. بالنسبة لمنحدر قدره 1/2 لا يوجد خيار مفضل. في في هذه الحالةتختار الخوارزمية النقطة (1،1).

أرز. 2. الفكرة الرئيسية لخوارزمية بريسنهام.

لا تمر جميع المقاطع عبر النقاط النقطية. حالة مماثلةكما هو موضح في الشكل 3، حيث يمر الجزء الذي يبلغ ميله 3/8 أولاً عبر النقطة النقطية (0,0) ويتقاطع بشكل تسلسلي مع ثلاث بكسلات. يتم أيضًا توضيح حساب الخطأ عند تمثيل مقطع ما بالبكسلات المنفصلة.

تين. 3. رسم بياني للخطأ في خوارزمية بريسنهام.

نظرًا لأنه من المستحسن التحقق من علامة الخطأ فقط، فقد تم ضبطها مبدئيًا على -1/2. وبالتالي، إذا كان المعامل الزاوي للمقطع أكبر من أو يساوي 1/2، فيمكن حساب قيمة الخطأ عند النقطة النقطية التالية ذات الإحداثيات (1,0) على النحو التالي

ه= ه + م

أين م- المعامل الزاوي. وفي حالتنا متى القيمة البدائيةأخطاء -1/2

ه = 1/2 + 3/8 = -1/8

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

ه= -1/8 + 3/8 = 1/4

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

ه = 1/4 - 1 = -3/4

لاحظ أن تقاطع خط عمودي س= 2 ثانية شريحة معينةتقع 1/4 تحت الخط المستقيم في= 1. إذا قمنا بتحريك القطعة بمقدار 1/2 لأسفل، فسنحصل على القيمة بالضبط -3/4. الاستمرار في الحسابات للبكسل التالي يعطي

ه = -3/4 + 3/8 = -3/8

لأن هسالبة، فإن y لا تزيد. ومن كل ما قيل، يترتب على ذلك أن الخطأ هو الفاصل الزمني المقطوع على طول المحور فيالجزء المعتبر في كل عنصر نقطي (نسبة إلى -1/2).

دعونا نقدم خوارزمية بريسنهام للثمن الأول، أي. للحالة 0 =< y =< x.

خوارزمية بريسنهام لتحليل المقطع إلى بيانات نقطية للثمانية الأولى

عدد صحيح- وظيفة التحويل إلى عدد صحيح

س، ص، س، ص - الأعداد الصحيحة

ه - حقيقي

تهيئة المتغيرات

التهيئة المصححة بنصف بكسل

بداية الحلقة الرئيسية

بينما (ه => 0)

يظهر الرسم التخطيطي للخوارزمية في الشكل 4.

الشكل 4. مخطط كتلة لخوارزمية بريسنهام.

مثال على خوارزمية بريسنهام.

خذ قطعة مرسومة من النقطة (0,0) إلى النقطة (5,5). يؤدي تحليل المقطع إلى بيانات نقطية باستخدام خوارزمية Bresenham إلى النتيجة التالية:

الإعدادات الأولية

ه = 1 - 1/2 = 1/2

تظهر النتيجة في الشكل 5 وتتوافق مع ما كان متوقعًا. لاحظ أن النقطة النقطية ذات الإحداثيات (5،5) غير مفعلة. يمكن تفعيل هذه النقطة عن طريق تغيير الحلقة التالية من 0 إلى x. يمكن إلغاء تنشيط النقطة (0,0) عن طريق وضع عبارة Plot مباشرة قبل السطر i التالي.

أرز. 5. نتيجة خوارزمية بريسنهام في الثمانية الأول.

خوارزمية عامةبريسنهام.

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

عدد صحيح معمم خوارزمية بريسنهام الرباعية

من المفترض أن طرفي المقطع (x1,y1) و (x2,y2) غير متطابقين

تعتبر جميع المتغيرات أعدادا صحيحة

لافتة- دالة تُرجع -1، 0، 1 للوسيطات السالبة والصفر والإيجابية، على التوالي

تهيئة المتغيرات

س = القيمة المطلقة (x2 - x1)

ص = القيمة المطلقة (y2 - y1)

س1 = لافتة(×2 - ×1)

س2 = لافتة(ص2 - ص1)

تبادل قيم x و y حسب ميل المقطع

لوذ< x ثم

نهاية لو

التهيئة هتم تعديله بمقدار نصف بكسل

الحلقة الرئيسية

لط = 1 لس

حبكة(س، ص)

بينما(ه =>0)

لوالصرف = 1 ثم

نهاية بينما

لوالصرف = 1 ثم


الشكل 6. تحليل الحالات لخوارزمية بريسنهام المعممة.

مثال. خوارزمية بريسنهام المعممة.

للتوضيح، خذ بعين الاعتبار مقطعًا من النقطة (0،0) إلى النقطة (-8، -4).

الإعدادات الأولية

نتائج دورة خطوة بخطوة

الشكل 7. نتيجة خوارزمية بريسنهام المعممة في الربع الثالث.

في التين. 7 يظهر النتيجة. مقارنة مع الشكل. يوضح الشكل 5 أن نتائج الخوارزميتين مختلفة.

يناقش القسم التالي خوارزمية بريسنهام لإنشاء دائرة.

خوارزمية بريسنهام لتوليد الدائرة.

من الضروري أن تتحلل إلى خطوط نقطية ليس فقط خطيًا ، ولكن أيضًا أكثر وظائف معقدة. تقسيم المقاطع المخروطية، أي الدوائر، والقطع الناقص، والقطع المكافئ، والقطع الزائد، تم تخصيص عدد كبير من الأعمال. معظم الاهتمام، بالطبع، تعطى للدائرة. واحدة من أكثر خوارزميات توليد الدوائر كفاءة وسهولة في الفهم ترجع إلى Bresenham. أولاً، لاحظ أنك تحتاج فقط إلى إنشاء ثمن الدائرة. ويمكن الحصول على أجزائه المتبقية عن طريق الانعكاسات المتتابعة، كما هو موضح في الشكل 2. 8. إذا تم توليد المثمن الأول (من 0 إلى 45 درجة عكس اتجاه عقارب الساعة)، فيمكن الحصول على المثمن الثاني عن طريق انعكاس المرآة بالنسبة للخط المستقيم y = x، والذي يعطي معًا الربع الأول. ينعكس الربع الأول بالنسبة إلى الخط x = 0 للحصول على الجزء المقابل من الدائرة في الربع الثاني. ينعكس نصف الدائرة العلوي بالنسبة للخط المستقيم y = 0 لإكمال البناء. في التين. ويبين الشكل 8 مصفوفات ثنائية الأبعاد للتحولات المقابلة.

أرز. 8. الجيل دائرة كاملةمن القوس في الثماني الأول.

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

لأي احد نقطة معينةعلى الدائرة، عند التوليد في اتجاه عقارب الساعة، هناك ثلاثة احتمالات فقط لتحديد البكسل التالي الذي يقترب بشكل أفضل من الدائرة: أفقيًا إلى اليمين، وقطريًا إلى الأسفل وإلى اليمين، وعموديًا إلى الأسفل. في التين. 10 تم تحديد هذه الاتجاهات m H , m D , m V على التوالي . تختار الخوارزمية بكسلًا يكون مربع المسافة بين إحدى وحدات البكسل هذه والدائرة عنده ضئيلًا، أي الحد الأدنى لـ

م ح = |(x i + 1) 2 + (y i) 2 -R 2 |

م د = | |

م V = |(x i) 2 + (y i -1) 2 -R 2 |

يمكن تبسيط الحسابات إذا لاحظنا أنه في محيط النقطة (xi،yi،) هناك خمسة أنواع فقط من تقاطعات الدائرة والشبكة النقطية ممكنة، كما هو موضح في الشكل. أحد عشر.

أرز. 11. تقاطع الدائرة والشبكة النقطية.

الفرق بين المسافات المربعة من مركز الدائرة إلى البكسل القطري (x i, + 1, y i - 1) ومن المركز إلى نقطة على الدائرة R 2 تساوي

د i = (x i + 1) 2 + (y i -1) 2 -R 2

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

عندما د أنا< 0 диагональная точка (x i , + 1, у i - 1) يقع داخل دائرة حقيقية، أي هذه هي الحالتين 1 أو 2 في الشكل. 11. من الواضح أنه في هذه الحالة عليك اختيار إما البكسل (x i, + 1, فيأنا) , أي م ح، أو بكسل (س ط، + 1، فيأنا - 1)، أي م د . للقيام بذلك، فكر أولاً في الحالة 1 وتحقق من الفرق في المسافات المربعة من الدائرة إلى وحدات البكسل في الاتجاهين الأفقي والقطري:

د = |(x i + 1) 2 + (y i) 2 -R 2 | - |(x i + 1) 2 + (y i -1) 2 -R 2 |

عند د< 0 расстояние от окружности до диагонального пикселя больше, чем до горизонтального. وعلى العكس من ذلك إذا كان د > 0, المسافة إلى البكسل الأفقي أكبر. هكذا،

في د<= 0 выбираем m H в (x i , + 1, у i - 1)

بالنسبة إلى d > 0، اختر m D في (x i, + 1, y i - 1)

عند e = 0، عندما تكون المسافة من الدائرة إلى كلا البكسلين متساوية، نختار الخطوة الأفقية.

يمكن تقليل عدد الحسابات المطلوبة لتقدير قيمة e من خلال ملاحظة ذلك في الحالة 1

(x i + 1) 2 + (y i) 2 -R 2 >= 0

(x i + 1) 2 + (y i -1) 2 -R 2< 0

منذ البكسل القطري (x i، + 1، فيأنا - 1) يقع دائمًا داخل الدائرة، ويكون أفقيًا (x i, + 1, فيأنا) - خارج منه. وبالتالي، يمكن حساب e باستخدام الصيغة

د = (x i + 1) 2 + (y i) 2 -R 2 + (x i + 1) 2 + (y i -1) 2 -R 2

بالإضافة إلى مربع كاملالحد (y i) 2 باستخدام الجمع والطرح - 2y i + 1 يعطي

د = 2[(x i + 1) 2 + (y i -1) 2 -R 2 ] + 2y i - 1

في أقواس مربعةيقف حسب التعريف e i واستبداله

د = 2(ه ط + ص ط) - 1

يبسط التعبير إلى حد كبير.

النظر في الحالة 2 في الشكل. 11 ولاحظ أنه يجب هنا تحديد البكسل الأفقي (x i، + 1، y i)، نظرًا لأن y دالة متناقصة بشكل رتيب. التحقق من المكونات يظهر ذلك

(xi + 1) 2 + (y i) 2 -R 2< 0

(x i + 1) 2 + (y i -1) 2 -R 2< 0

لأنه في الحالة 2، تقع البكسلات الأفقية (x i، + 1، y i) والقطرية (x i، + 1، y i -1) داخل الدائرة. ولذلك د< 0, и при использовании того же самого критерия, что и в случае 1, выбирается пиксел (x i , + 1, у i).

إذا كانت e i > 0، فإن النقطة القطرية (x i، + 1، y i -1) تكون خارج الدائرة، أي أن هاتين الحالتين 3 و4 في الشكل. 11. في هذه الحالة، من الواضح أنه يجب تحديد البكسل (x i, + 1, y i -1) أو (x i, y i -1) . على غرار تحليل الحالة السابقة، يمكن الحصول على معيار الاختيار من خلال النظر أولاً في الحالة 3 والتحقق من الفرق بين المسافات المربعة من الدائرة إلى البكسل القطري m D والعمودي m V،

أي د " = |(x i + 1) 2 + (y i -1) 2 -R 2 | - |(x i) 2 + (y i -1) 2 -R 2 |

في د " < 0 المسافة من الدائرة إلى البكسل العمودي (x i, y i -1) أكبر ويجب عليك تحديد خطوة قطرية إلى البكسل (x i, + 1, y i -1). وعلى العكس من ذلك، في حالة د " > 0، المسافة من الدائرة إلى البكسل القطري أكبر ويجب عليك اختيار حركة عمودية إلى البكسل (x i، y i -1). هكذا،

في د " <= 0 حدد m D في (x i +1، y i -1)

في د " > 0 حدد m V في (x i، y i -1)

هنا في حالة د " = 0، أي عندما تكون المسافات متساوية، يتم تحديد الخطوة القطرية.

فحص المكونات ه " يدل على أن

(x i) 2 + (y i -1) 2 -R 2 >= 0

(x i + 1) 2 + (y i -1) 2 -R 2< 0

لأنه في الحالة 3، يكون البكسل القطري (x i +1, y i -1) خارج الدائرة، بينما يكون البكسل الرأسي (x i, y i -1) بداخلها. هذا يسمح لنا بكتابة e " مثل

د " = (x i +1) 2 + (y i -1) 2 -R 2 + (x i) 2 + (y i -1) 2 -R 2

إكمال المربع الكامل للحد (xi) 2 بإضافة وطرح 2x i + 1 يعطي

د " = 2[(x i +1) 2 + (y i -1) 2 -R 2 ] - 2x i - 1

باستخدام التعريف d i أحضر التعبير إلى النموذج

د " = 2(ه ط - × ط )- 1

الآن، بالنظر إلى الحالة 4، نلاحظ مرة أخرى أنه يجب علينا اختيار البكسل الرأسي (x i، y i -1)، نظرًا لأن y هي دالة تتناقص بشكل رتيب كلما زادت X.

فحص المكونات د " للحالة 4 تبين ذلك

(x i +1) 2 + (y i -1) 2 -R 2 > 0

(x i) 2 + (y i -1) 2 -R 2 > 0

نظرًا لأن كلا البيكسلين خارج الدائرة. لذلك، ه " > 0 وعند استخدام المعيار الذي تم تطويره للحالة 3، يحدث الاختيار الصحيح لـ m V .

يبقى التحقق من الحالة 5 فقط في الشكل. 11، والذي يحدث عندما يقع البكسل القطري (x i، y i -1) على الدائرة، أي d i = 0. ويبين فحص المكونات الإلكترونية ذلك

(x i +1) 2 + (y i) 2 -R 2 > 0

لذلك، يتم تحديد d > 0 والبكسل القطري (x i +1, y i -1). وبالمثل، فإننا نقدر المكونات د " :

(x i +1) 2 + (y i -1) 2 -R 2 = 0

(x i +1) 2 + (y i -1) 2 -R 2< 0

و د " < 0, что является условием выбора правильного диагонального шага к (x i +1 , у i -1) . Таким образом, случай d i = 0 подчиняется тому же критерию, что и случай d i < 0 или d i >0. دعونا نلخص النتائج التي تم الحصول عليها:

د<= 0 выбираем пиксел (x i +1 , у i) - m H

د > 0 حدد بكسل (x i +1، y i -1) - م د

د " <= 0 выбираем пиксел (x i +1 , у i -1) - m D

د " > 0 حدد البكسل (x i, y i -1)- m V

d i = 0 حدد البكسل (x i +1, y i -1) - m D

من السهل تطوير علاقات تكرار بسيطة لتنفيذ خوارزمية متدرجة. خذ بعين الاعتبار أولاً الخطوة الأفقية m H إلى البكسل (x i + 1, y i) . لنشير إلى موضع البكسل الجديد هذا بالرمز (i + 1). ثم تكون إحداثيات البكسل الجديد والقيمة e i متساوية

د i +1 = (x i +1 +1) 2 + (y i +1 -1) 2 -R 2 dd i + 2x i +1 + 1

وبالمثل، فإن إحداثيات البكسل الجديد والقيمة d i للخطوة m D إلى البكسل (x i + 1, y i -1) هي كما يلي:

د i+1 = د i + 2x i+1 - 2y i+1 +2

نفس الشيء بالنسبة للخطوة m V إلى (x i، y i -1)

د i+1 = د i - 2y i+1 +1

فيما يلي تطبيق لخوارزمية Bresenham في الكود الكاذب للدائرة.

خوارزمية Bresenham خطوة بخطوة لإنشاء دائرة في الربع الأول

جميع المتغيرات هي أعداد صحيحة

تهيئة المتغيرات

الحد = 0

1 حبكة(س ط ، ص ط )

لوذ ط<= Пределثم 4

اختيار الحالة 1 أو 2 أو 4 أو 5 أو 3

إذا د ط< 0ثم 2

إذا د > 0ثم 3

إذا د ط = 0 ثم 20

تعريف الحالة 1 أو 2

2 د = 2د ط + 2у ط - 1

إذا د<= 0ثم 10

إذا د> 0 ثم 20

تعريف الحالة 4 أو 5

3 د = 2D ط + 2س ط - 1

لود <= 0ثم 20

لود > 0 ثم 30

خطوات التنفيذ

10 س ط = س ط + 1

د ط = د ط + 2س ط + 1

زياإلى 1

20 س ط = س ط + 1

D i = D i + 2x i - 2у i + 2

اذهب إلى 1

4 الانتهاء

يتم تعيين متغير الحد على الصفر لإنهاء الخوارزمية على المحور الأفقي، مما يؤدي إلى إنشاء دائرة في الربع الأول. إذا كانت هناك حاجة إلى ثماني واحد فقط، فيمكن الحصول على الثماني الثاني باستخدام إعداد Limit = عدد صحيح(R/sqrt(2))، والأول - باستخدام انعكاس الثماني الثاني بالنسبة للخط المستقيم y = x (الشكل 8). يظهر الرسم التخطيطي للخوارزمية في الشكل. 12.

أرز. 12. رسم تخطيطي لخوارزمية بريسنهام المتدرجة لتوليد دائرة في الربع الأول.

منحنى بيزييه وخوارزميته الهندسية.

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

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

تم تقديم المنحنيات لأول مرة لعامة الناس في عام 1962 من قبل المهندس الفرنسي بيير بيزييه، الذي قام بتطويرها بشكل مستقل عن دي كاستيلير، واستخدمها لتصميم هياكل السيارات بمساعدة الكمبيوتر. تم تسمية المنحنيات باسم بيزييه، وتم تسمية الطريقة العودية التي طورها لتحديد المنحنيات (خوارزمية دي كاستيلير) على اسم دي كاستيلير.

وبعد ذلك، أصبح هذا الاكتشاف أحد أهم الأدوات في أنظمة التصميم بمساعدة الكمبيوتر وبرامج الرسومات الحاسوبية.

منحنى بيزييه - المنحنى البارامترى المعطى بالتعبير

, 0 < t <1

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

حيث n هي درجة كثيرة الحدود، i هو الرقم الترتيبي للقمة المرجعية.

أنواع منحنيات بيزيير

منحنيات خطية

عندما يكون n = 1، يكون المنحنى عبارة عن قطعة خط مستقيم، وتحدد النقطتان المرجعيتان P0 وP1 بدايته ونهايته.

يتم إعطاء المنحنى بالمعادلة:

,

منحنيات تربيعية

يتم تحديد (n = 2) بثلاث نقاط مرجعية: P0 وP1 وP2.

تُستخدم منحنيات Bezier التربيعية كجزء من الخطوط لوصف شكل الأحرف في خطوط TrueType وملفات SWF.

منحنيات مكعبة

(ن = 3) يوصف بالمعادلة التالية:

تحدد أربع نقاط مرجعية P0 وP1 وP2 وP3، محددة في مساحة ثنائية أو ثلاثية الأبعاد، شكل المنحنى.

يبدأ الخط من النقطة P0 متجهًا نحو P1 وينتهي عند النقطة P3 مقتربًا منها من P2. أي أن المنحنى لا يمر بالنقطتين P1 وP2، بل يتم استخدامهما للإشارة إلى اتجاهه. يحدد طول المقطع بين P0 وP1 مدى سرعة تحول المنحنى نحو P3.

في شكل مصفوفة، يتم كتابة منحنى بيزيير مكعب على النحو التالي:

,

أين يطلق عليه مصفوفة الأساسبيزيير:

تستخدم أنظمة الرسومات الحديثة مثل PostScript وMetafont وGIMP خطوط Bezier المكونة من منحنيات مكعبة لتمثيل الأشكال المنحنية.

التطبيق في الرسومات الحاسوبية

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

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

خوارزمية هندسية لمنحنى بيزيير

تسمح لك هذه الخوارزمية بحساب إحداثيات (x، y) لنقطة ما على منحنى Bezier بناءً على قيمة المعلمة ر.

1. يتم تقسيم كل جانب من محيط المضلع الذي يمر عبر النقاط المميزة بشكل متناسب مع القيمة ر.

2. ترتبط نقاط التقسيم بقطع مستقيمة وتشكل مضلعًا جديدًا. عدد عقد الدائرة الجديدة أقل بواحد من عدد عقد الدائرة السابقة.

3. يتم تقسيم جوانب الكفاف الجديد مرة أخرى بما يتناسب مع القيمة ر. وما إلى ذلك وهلم جرا. يستمر هذا حتى يتم الحصول على نقطة تقسيم واحدة. ستكون هذه النقطة هي نقطة منحنى بيزييه.

فيما يلي تسجيل للخوارزمية الهندسية في لغة C++:

ل (أنا = 0؛أنا< = م؛أنا + +)

ص[أنا] =ف[أنا]؛ // إنشاء مصفوفة مساعدةر

ل(ي = م؛ أنا > 0؛ أنا - -)

ل (ط = 0؛ ط< j; i + +)

ص[أنا] =ص[أنا] +ر*(ص[أنا + 1] –ص[أنا])؛

نتيجة الخوارزمية - تتم كتابة إحداثيات نقطة واحدة من منحنى بيزيير بالرمز R.

نماذج لوصف الأسطح. النموذج التحليلي.

النموذج التحليلي هو وصف للسطح باستخدام الصيغ الرياضية:

z = f(x,y) – الوصف باستخدام دالة،

F(x,y,z) = 0 – الوصف باستخدام معادلة ضمنية.

غالبًا ما يتم استخدام الشكل البارامتري لوصف السطح:

حيث s وt عبارة عن معلمات تختلف ضمن نطاق معين، وتحدد الوظائف Fx وFy وFz شكل السطح.

ميزة ويكمن الشكل البارامتري في سهولة وصف الأسطح التي تتوافق مع الوظائف الغامضة والأسطح المغلقة.

وصف البارامترية يمكن ضبطها بطريقة لا تتغير فيها الصيغة بشكل ملحوظ (تصبح أكثر تعقيدًا) عند تدوير السطح أو تغيير حجمه.

على سبيل المثال، النظر في الوصف التحليلي لسطح الكرة.

هي وظيفة صريحة من وسيطتين،

- المعادلة الضمنية،

x = R sin s cos t, y = R sin s sin t, z = R cos s - في شكل حدودي.

النموذج التحليلي هو الأكثر ملاءمة للعديد من عمليات التحليل السطحي.

مزايا النماذج (من وجهة نظر CG):

  • سهولة حساب إحداثيات كل نقطة سطحية وطبيعية؛
  • كمية صغيرة من البيانات لوصف أشكال معقدة إلى حد ما.

عيوب:

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

نموذج السطح "شبكة موحدة".

يصف هذا النموذج إحداثيات النقاط السطحية الفردية بالطريقة التالية. يتم تعيين قيمة ارتفاع zij لكل عقدة شبكة ذات مؤشرات (i، j). تتوافق المؤشرات (i، j) مع قيم إحداثية معينة (x، y). المسافة بين العقد هي نفسها - dx على طول المحور x، وdy على طول المحور y. في الواقع، مثل هذا النموذج عبارة عن مصفوفة ثنائية الأبعاد، نقطية، مصفوفة، كل عنصر منها يخزن قيمة الارتفاع.

لا يمكن تمثيل كل سطح بهذا النموذج. إذا تم تسجيل قيمة ارتفاع واحدة فقط في كل عقدة (i, j)، فهذا يعني أن السطح موصوف بواسطة دالة ذات قيمة واحدة z = f (x, y). بمعنى آخر، هذا هو السطح الذي يتقاطع معه كل رأسي مرة واحدة فقط. لا يمكن نمذجة الوجوه العمودية أيضًا. تجدر الإشارة إلى أنه يمكن تحديد الشبكة ليس فقط بالإحداثيات الديكارتية. على سبيل المثال، من أجل وصف سطح الكرة بوظيفة فريدة، يمكنك استخدام الإحداثيات القطبية. باستخدام شبكة موحدة، غالبا ما يتم وصف ارتياح سطح الأرض.

السمات الإيجابية للشبكة الموحدة:

  • سهولة وصف الأسطح.
  • القدرة على معرفة ارتفاع أي نقطة على السطح بسرعة عن طريق الاستيفاء البسيط.

مساوئ شبكة موحدة:

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

نموذج السطح "الشبكة غير المستوية".

الشبكة غير المستوية هي نموذج لوصف سطح على شكل مجموعة من النقاط الفردية ((x0, y0, z0), (x1, y1, z1),..., (xn – 1, yn – 1, zn – 1)) تابعة للسطح . ويمكن الحصول على هذه النقاط، على سبيل المثال، نتيجة قياس سطح جسم ما باستخدام معدات معينة. يمكن اعتبار هذا النموذج تعميماً لبعض النماذج التي تمت مناقشتها أعلاه. على سبيل المثال، يمكن اعتبار نموذج المضلع المتجه والشبكة المنتظمة اختلافات في الشبكة غير المنتظمة.

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

لتكن المهمة هي حساب قيمة الإحداثي z باستخدام الإحداثيات المعروفة (x، y). للقيام بذلك، تحتاج إلى العثور على العديد من النقاط الأقرب، ثم حساب قيمة z المطلوبة بناءً على الموضع النسبي لهذه النقاط في الإسقاط (x، y). بالنسبة لشبكة موحدة، يتم حل هذه المشكلة بكل بساطة - لا يوجد أي بحث تقريبًا، ويتم حساب مؤشرات أقرب النقاط المرجعية على الفور.

المهمة الثانية هي عرض (تصور) السطح. يمكن حل هذه المشكلة بعدة طرق. واحدة من الأكثر شيوعا هو التثليث.

يمكن تمثيل عملية التثليث على النحو التالي:

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

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

يعرض الشكل تفسيرًا رسوميًا لخوارزمية بريسنهام.

لرسم القطع المستقيمة على المستوى باستخدام خوارزمية بريسنهام، نكتب معادلة الخط المستقيم في الصورة العامة

f(x,y)=الفأس+ب+C=0

أين هي المعاملات أو بيتم التعبير عنها من خلال المعاملات كو بمعادلات الخط المستقيم. إذا مر خط عبر نقطتين بإحداثياتهما ( ×1;y1) و ( ×2;y2) ، ثم يتم تحديد معاملات معادلة الخط المستقيم بواسطة الصيغ

أ=y2-y1
ب=x1-x2
ج=y1∙x2-y2∙x1

لأي نقطة نقطية ذات إحداثيات ( الحادي عشر;يي) وظيفة القيمة

  • و (الحادي عشر، يي)=0 إذا كانت النقطة تقع على الخط
  • و (الحادي عشر، يي)>0 إذا كانت النقطة تقع أسفل الخط
  • و (الحادي عشر، يي)أين أنا- رقم النقطة المعروضة.

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

∆f=A∆x+B∆y

بعد عرض نقطة مع الإحداثيات (الحادي عشر، يي)يتم اتخاذ قرار بشأن النقطة التالية التي سيتم عرضها. للقيام بذلك، تتم مقارنة الزيادات Δxو Δy، تميز وجود أو عدم وجود حركة على طول الإحداثيات المقابلة. هذه الزيادات يمكن أن تأخذ القيم 0 أو 1. لذلك، عندما ننتقل من نقطة إلى اليمين،

عندما ننتقل من نقطة إلى اليمين وإلى الأسفل، إذن

∆f=أ+ب,

عندما ننتقل من نقطة إلى أسفل، ثم

نحن نعرف إحداثيات بداية القطعة، أي النقطة التي من الواضح أنها تقع على الخط المطلوب. نضع النقطة الأولى هناك ونقبل F= 0 . يمكنك اتخاذ خطوتين من النقطة الحالية - إما عموديًا (أفقيًا) أو قطريًا بمقدار بكسل واحد.
يتم تحديد اتجاه الحركة عموديًا أو أفقيًا بواسطة معامل زاوية الميل. إذا كانت زاوية الميل أقل من 45 درجة، و

|أ|<|B|

مع كل خطوة، تحدث الحركة أفقيا أو قطريا.
إذا كانت زاوية الميل أكبر من 45 درجة، تكون الحركة مع كل خطوة عمودية أو قطرية.
وبالتالي، فإن خوارزمية رسم الجزء المائل هي كما يلي:

التنفيذ في C++

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69

#يشمل
استخدام اسم للمحطة؛
باطلة بريزينهيم (شار ** z، int x0، int y0، int x1، int y1)
{
إنت أ، ب، علامة؛
أ = ص1 - ص0؛
ب = س0 - س1؛
إذا (abs(A) > abs(B)) علامة = 1؛
علامة أخرى = -1؛
إنت سيجنا، سينب؛
اذا كان< 0) signa = -1;
علامة أخرى = 1؛
إذا (ب< 0) signb = -1;
علامة أخرى = 1؛
كثافة العمليات و = 0؛
ض = "*" ;
int x = x0, y = y0;
إذا (علامة == -1)
{
يفعل (
f += A*signa;
إذا (و > 0)
{
f -= B*signb;
y += Signa;
}
x -= Signb;
z[y][x] = "*" ;
}
آخر
{
يفعل (
f += B*signb;
إذا (و > 0) (
f -= أ*سيجنا;
x -= Signb;
}
y += Signa;
z[y][x] = "*" ;
) بينما (x != x1 || y != y1);
}
}
انت مين()
{
حجم ثابت int = 25؛ // حجم الحقل
كثافة العمليات x1، x2، y1، y2؛
شار**ض;
ض = شار جديد *؛
ل (int i = 0؛ i< SIZE; i++)
{
z[i] = حرف جديد؛
ل(int j = 0; j< SIZE; j++)
z[i][j] = "-" ;
}
cout<< "x1 = " ; cin >> ×1؛
cout<< "y1 = " ; cin >> ص1؛
cout<< "x2 = " ; cin >>x2;
cout<< "y2 = " ; cin >> ص2؛
بريزينهيم(z, x1, y1, x2, y2);
ل (int i = 0؛ i< SIZE; i++)
{
ل(int j = 0; j< SIZE; j++)
cout<< z[i][j];
cout<< endl;
}
سين.جيت(); سين.جيت();
العودة 0؛
}


نتيجة التنفيذ



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

خوارزمية بريسنهام هي خوارزمية تحدد النقاط الموجودة على البيانات النقطية ثنائية الأبعاد التي يجب تظليلها للحصول على تقريب قريب لخط مستقيم بين نقطتين محددتين.

يتم رسم المقطع بين نقطتين - (x0,y0) و (x1,y1)، حيث يُشار في هذه الأزواج إلى العمود والصف، على التوالي، والتي تزداد أعدادها إلى اليمين وإلى الأسفل. أولاً سنفترض أن الخط الذي لدينا يتجه للأسفل وإلى اليمين، وأن المسافة الأفقية x1 − x0 تتجاوز المسافة العمودية y1 − y0، أي. - ميل الخط عن الأفقي أقل من 45 درجة. هدفنا هو تحديد صف y الأقرب إلى الخط لكل عمود x بين x0 وx1 ورسم نقطة (x,y).

الصيغة العامة للخط الفاصل بين نقطتين هي:

وبما أننا نعرف العمود x، فسيتم الحصول على الصف y عن طريق تقريب القيمة التالية إلى عدد صحيح:

ومع ذلك، ليست هناك حاجة لحساب القيمة الدقيقة لهذا التعبير. ويكفي أن نلاحظ أن y ينمو من y0 ولكل خطوة نضيف واحد إلى x ونضيف قيمة الميل إلى y

والتي يمكن حسابها مقدما. علاوة على ذلك، في كل خطوة نقوم بأحد أمرين: إما أن نحتفظ بنفس قيمة y، أو نزيدها بمقدار 1.

يمكن تحديد أي من هذين الخيارين من خلال تتبع قيمة الخطأ، وهو ما يعني المسافة العمودية بين قيمة y الحالية وقيمة y الدقيقة لـ x الحالية. كلما قمنا بزيادة x، فإننا نزيد قيمة الخطأ بمقدار الميل s الموضح أعلاه. إذا كان الخطأ أكبر من 0.5، يكون الخط أقرب إلى y التالي، لذلك نزيد y بمقدار واحد مع تقليل قيمة الخطأ بمقدار 1. في تنفيذ الخوارزمية أدناه، يرسم الرسم البياني (x,y) نقطة وقيمة abs إرجاع القيمة المطلقة للرقم:

وظيفةالسطر (x0، x1، y0، y1)

كثافة العملياتدلتاكس:= القيمة المطلقة (x1 - x0)

كثافة العملياتدلتاي:= القيمة المطلقة (y1 - y0)

حقيقيالخطأ:= 0

حقيقي deltaerr:= deltay / deltax

كثافة العملياتص:=y0

لس من x0 ل×1

خطأ:= خطأ + deltaerr

لوالخطأ >= 0.5

خطأ:= خطأ - 1.0

اجعل إحداثيات بداية المقطع (X 1,Y 1) والنهاية (X 1,X 2). دعونا نشير

Dx=(X 2 -X 1),dy=(Y 2 -Y 1) . وبدون فقدان العمومية، سنفترض أن بداية القطعة تتزامن مع أصل الإحداثيات، وأن الخط المستقيم له الشكل

أين. نحن نفترض أن نقطة البداية هي على اليسار. دع في الخطوة (i-1) تكون النقطة الحالية للقطعة هي P i -1 =(r,q) . يعتمد اختيار النقطة التالية S i أو T i على علامة الفرق (s-t). إذا (س-ر)<0 , то P i =T i =(r+1,q) и тогда

X i +1 =i+1;Y i +1 =Y i , إذا (s-t)≥0، ثم P i =T i =(r+1,q+1) ثم X i +1 =i+ 1 ; ص أنا +1 = ص أنا +1 ;

dx=(s-t)=2(rdy-qdx)+2dy –dx

وبما أن إشارة dx=(s-t) تتطابق مع إشارة الفرق)، فسوف نتحقق من إشارة التعبير d i =dx(s-t). . بما أن r=X i -1 و q=Y i -1 إذن

د i +1 = د i +2dy -2dx(y i -y i -1) .

دعونا في الخطوة السابقة د ط<0 , тогда(y i -y i -1)=0 и d i +1 = d i +2dy . Если же на предыдущем шаге d i ≥0 , тогда(y i -y i -1)=1 и d i +1 = d i +2dx(y i -y i -1)

يبقى معرفة كيفية حساب d i. منذ أن = 1

الإجراء Bresenham(x1,y1,x2,y2,اللون: عدد صحيح);

dx,dy,incr1,incr2,d,x,y,xend: عدد صحيح;

dx:= ABS(x2-x1);

dy:= أبس(y2-y1);

د:=2*dy-dx; (القيمة الأولية لـ d)

incr1:=2*dy; (الزيادة د<0}

incr2:=2*(dy-dx); (الزيادة لـ d>=0)

إذا كان x1>x2 إذن (ابدأ من النقطة ذات قيمة x الأصغر)

PutPixel(x,y,Color); (النقطة الأولى من المقطع)

بينما س

d:=d+incr1 (حدد النقطة السفلية)

د:=د+incr2; (حدد النقطة العليا، زيادات y)

PutPixel(x,y,Color);

26. خوارزمية بريسنهام العامة.

تحدد الخوارزمية الإحداثيات النقطية المثالية لتمثيل المقطع. يتم اختيار أكبر الزيادات، إما Δx أو Δy، لتكون وحدة البيانات النقطية. أثناء التشغيل، يتغير أحد الإحداثيات - إما x أو y (حسب المنحدر) - بمقدار واحد. يعتمد تغيير إحداثي آخر (إلى 0 أو 1) على المسافة بين الموضع الفعلي للقطعة وأقرب إحداثيات الشبكة. هذه المسافة خطأ.

تم إنشاء الخوارزمية بطريقة لا تحتاج فيها إلا إلى معرفة علامة هذا الخطأ. وبالتالي، فإن النقطة النقطية (1، 1) تقارب مسار المقطع بشكل أفضل من النقطة (1، 0). وإذا كان الميل أقل من ½ فإن العكس هو الصحيح. بالنسبة لمنحدر قدره ½، لا يوجد خيار مفضل. في هذه الحالة، تختار الخوارزمية النقطة (1، 1). نظرًا لأنه من المستحسن التحقق من علامة الخطأ فقط، فقد تم ضبطها مبدئيًا على -½. وبالتالي، إذا كان ميل المقطع أكبر من أو يساوي ½، فيمكن حساب قيمة الخطأ عند النقطة النقطية التالية على النحو e = -½ + Δy/Δx.

لكي يكتمل تنفيذ خوارزمية بريسنهام، من الضروري معالجة المقاطع في جميع الثُمانيات. من السهل القيام بذلك، مع الأخذ في الاعتبار في الخوارزمية عدد الربع الذي يقع فيه الجزء ومعامله الزاوي. عندما تكون القيمة المطلقة للميل أكبر من 1، تتغير y باستمرار بمقدار واحد، ويتم استخدام معيار خطأ بريسنهام لتحديد ما إذا كان سيتم تغيير قيمة x. يعتمد اختيار الإحداثيات المتغيرة باستمرار (+1 أو -1) على الربع

فار x,y,sy,sx,dx,dy,e,z,i: عدد صحيح;
التغيير: منطقي؛
يبدأ
س:=x1; ص:=y1;
dx:=abs(x2-x1); دي:=أبس(y2-y1) ;
سكس:=علامة(x2-x1); sy:=sign(y2-y1);
e:= 2*dy-dx;
إذا دي
آخر تبدأ
ض:=دكس؛
dx:=dy; دي:=ض;
التغيير: = صحيح
نهاية؛
لأني:=1 إلى dx+dy تبدأ
إذا دي< dx then begin
إذا تغير ثم y:=y+sy
وإلا س:=س+سكس؛
e:=e+2*dy;
نهاية آخر
إذا تغير ثم x:=x+sx
آخر y:=y+sy;
e:=e-2*dx
نهاية؛
Form1.Canvas.Pixels:=clblack; // إخراج نقطة، على سبيل المثال
نهاية؛


27. خوارزمية بريسنهام لتوليد الدائرة

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

لإظهار الخوارزمية، دعونا نلقي نظرة على ربع الحصة المتمركزة على قطعة الإحداثيات. يرجى ملاحظة أنه بما أن الخوارزمية تبدأ عند النقطة x = 0، y = R، فعند إنشاء دائرة خلف سهم السنة في المربع الأول، تكون y دالة تنازلية رتيبة للوسائط. وبالمثل، إذا كانت نقطة الإخراج هي y = 0، x == R، فعند إنشاء دائرة مقابل السهم x ستكون دالة متناقصة بشكل رتيب للوسيطة y. في حالتنا، يتم تحديد الجيل خلف سهم السنة مع قطعة خبز عند النقطة x = 0، y = R. ويعني ذلك أن مركز الحصة ونقطة قطعة القماش يقعان بالضبط عند النقاط النقطية.

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

28. مفهوم الفراكتل. تاريخ الرسومات كسورية

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

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

29. مفهوم البعد وحسابه

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

البعد 2 يعني أنه يمكننا تحديد أي نقطة بشكل فريد برقمين. لا أعتقد أن ثنائي الأبعاد يعني شقة. سطح الكرة أيضًا ثنائي الأبعاد (يمكن تعريفه باستخدام قيمتين - زوايا مثل العرض وخط الطول).

إذا نظرنا إلى الأمر من وجهة نظر رياضية، فسيتم تحديد البعد على النحو التالي: بالنسبة للكائنات ذات البعد الواحد، يؤدي مضاعفة حجمها الخطي إلى زيادة الحجم (في هذه الحالة، الطول) بعامل اثنين (2 ^ 1).

بالنسبة للكائنات ثنائية الأبعاد، يؤدي مضاعفة الأبعاد الخطية إلى زيادة الحجم (على سبيل المثال، مساحة المستطيل) بمقدار أربعة أضعاف (2^2).

بالنسبة للكائنات ثلاثية الأبعاد، يؤدي مضاعفة الأبعاد الخطية إلى زيادة الحجم بمقدار ثمانية أضعاف (2^3) وهكذا.

فركتلات هندسية

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

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

أمثلة على الفركتلات الهندسية: منحنى البيانو، ندفة ثلج كوخ، ورقة السرخس، مثلث سيربينسكي،


أرز. ندفة الثلج كوخ

أرز. ملزمة


أرز. مثلث سيربينسكي

فركتلات جبرية

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

حصلت الفركتلات الجبرية على اسمها لأنها مبنية على أساس الدوال الجبرية. تشمل الفركتلات الجبرية: مجموعة ماندلبروت، مجموعة جوليا، أحواض نيوتن، البيومورفات.

-مجموعة ماندلبروت:تم وصف مجموعة ماندلبروت لأول مرة في عام 1905 من قبل بيير فاتو. درس فاتو العمليات العودية للنموذج

بدءًا من نقطة على المستوى المركب، يمكنك الحصول على نقاط جديدة من خلال تطبيق هذه الصيغة عليها تباعًا. يسمى هذا التسلسل من النقاط مدارًا قيد التحويل

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

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

-حمامات نيوتن:تظهر المناطق ذات الحدود الفركتلية عندما يتم العثور على جذور معادلة غير خطية تقريبًا بواسطة خوارزمية نيوتن على مستوى معقد (بالنسبة لدالة متغير حقيقي، غالبًا ما تسمى طريقة نيوتن طريقة الظل، والتي، في هذه الحالة، معممة على المستوى المعقد).

دعونا نطبق طريقة نيوتن للعثور على صفر دالة لمتغير معقد باستخدام الإجراء:

اختيار التقريب الأولي له أهمية خاصة. لأن قد تحتوي الدالة على أصفار متعددة، وفي حالات مختلفة قد تتقارب الطريقة إلى قيم مختلفة.

– الأشكال الحيوية:شكل مختصر لمجموعة جوليا، محسوبة بالصيغة z=z 3 +c. حصلت على اسمها بسبب تشابهها مع الكائنات وحيدة الخلية.

فركتلات العشوائية

الممثل النموذجي لهذا النوع من الفراكتل هو ما يسمى بالبلازما.

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

الكائنات الطبيعية غالبا ما يكون لها شكل كسورية. يمكن استخدام الفركتلات العشوائية (العشوائية) لصياغتها. أمثلة على فركتلات العشوائية:

مسار الحركة البراونية على المستوى وفي الفضاء؛

حدود مسار الحركة البراونية على المستوى. وفي عام 2001، أثبت لولر وشرام وفيرنر فرضية ماندلبروت بأن بعده هو 4/3.

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

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

النمط الكسري النمطي، أو النمط العشوائي، هو اتجاه في الفنون الجميلة يتضمن الحصول على صورة كسورية عشوائية.


معلومات ذات صله.


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

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

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

كان هذا هو جوهر الخوارزمية، في الواقع كل شيء يبدو هكذا. أولا، يتم حساب المنحدر (y1 - y0)/(x1 - x0). قيمة الخطأ عند نقطة بداية المقطع (0,0) يؤخذ يساوي الصفر ويتم ملء الخلية الأولى. وفي الخطوة التالية يضاف الميل إلى الخطأ ويتم تحليل قيمته إذا كان الخطأ أقل 0.5 ، ثم تمتلئ الخلية (س0+1، ص0)إذا كان أكثر من ذلك، فإن الخلية ممتلئة (س0+1، ص0+1)ويتم طرح واحد من قيمة الخطأ. في الصورة أدناه يظهر الخط قبل التنقيط باللون الأصفر، والمسافة إلى أقرب الخلايا تظهر باللون الأخضر والأحمر. الميل يساوي السدس، وفي الخطوة الأولى يصبح الخطأ يساوي الميل، وهو أقل 0.5 ، مما يعني أن الإحداثي يظل كما هو. في منتصف الخط، يعبر الخطأ الخط، ويتم طرح واحد منه، ويرتفع البكسل الجديد إلى أعلى. وهكذا حتى نهاية المقطع.

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

لتحسين العمليات الحسابية، استخدم خدعة ضرب جميع المتغيرات الكسرية في دكس = (س1 - س0). ثم في كل خطوة سيتغير الخطأ إلى دي = (y1 - y0)بدلا من المنحدر وبواسطة dxبدلا من واحد. يمكنك أيضًا تغيير المنطق قليلًا، "نقل" الخطأ بحيث يكون الحد عند الصفر، ويمكنك التحقق من علامة الخطأ، وقد يكون ذلك أسرع؛

قد يبدو رمز رسم خط نقطي باستخدام خوارزمية Bresenham شيئًا كهذا. تم تحويل الكود الزائف من ويكيبيديا إلى C#.

void BresenhamLine(int x0, int y0, int x1, int y1) ( varانحدار = Math.Abs(y1 - y0) > Math.Abs(x1 - x0); // تحقق من نمو المقطع على طول المحور السيني وعلى طول المحور y // اعكس الخط قطريًا إذا كانت زاوية الميل كبيرة جدًا if (شديد الانحدار) ( Swap(ref x0, ref y0); // تم تضمين خلط الإحداثيات في وظيفة منفصلة للجمال Swap(ref x1, ref y1); // إذا كان الخط لا ينمو من اليسار إلى اليمين، فإننا نقوم بتبديل بداية المقطع ونهايته if (x0 > x1) ( Swap(ref x0, ref x1); Swap(ref y0, ref y1); ) int dx = x1 - x0; (y1 - y0); int error = dx / 2; // يستخدم هذا التحسين بالضرب في dx للتخلص من الكسور الإضافية int ystep = (y0< y1) ? 1: -1; // Выбираем направление роста координаты y int y = y0; for (int x = x0; x <= x1; x++) { DrawPoint(steep ? y: x, steep ? x: y); // Не забываем вернуть координаты на место error -= dy; if (error < 0) { y += ystep; error += dx; } } }


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

رمز مثال لرسم دائرة في C#.

باطلة BresenhamCircle(int x0, int y0, int radius) ( int x = radius; int y = 0; int radiusError = 1 - x; while (x >= y) ( DrawPoint(x + x0, y + y0); DrawPoint (y + x0, x + y0); -y + y0);< 0) { radiusError += 2 * y + 1; } else { x--; radiusError += 2 * (y - x + 1); } } }


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

في الصورة أعلاه، يظهر اللونان الأحمر والأخضر المسافات إلى بكسلين متجاورين.

لحساب الخطأ، يمكنك استخدام متغير النقطة العائمة وأخذ قيمة الخطأ من الجزء الكسري.

نموذج التعليمات البرمجية للخط السلس لـ Wu Xiaolin في C#.

WuLine باطلة خاصة (int x0, int y0, int x1, int y1) ( varانحدار = Math.Abs(y1 - y0) > Math.Abs(x1 - x0); إذا (شديد الانحدار) ( Swap(ref x0, ref y0 ); تقوم هذه الوظيفة تلقائيًا بتغيير الإحداثيات اعتمادًا على المتغير DrawPoint(steep, x1, y1, 1); // الوسيطة الأخيرة هي الكثافة في كسور واحدة float dx = x1 - x0; ; تعويم y = y0 + التدرج for (var x = x0 + 1; x<= x1 - 1; x++) { DrawPoint(steep, x, (int)y, 1 - (y - (int)y)); DrawPoint(steep, x, (int)y + 1, y - (int)y); y += gradient; } }


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

من الصعب اليوم العثور على شخص لم يواجه رسومات الكمبيوتر بشكل أو بآخر. إذا بدأ الشخص في الاهتمام بالخوارزميات التي تقوم عليها، فستكون خوارزميات بريسنهام واحدة من أولى الخوارزميات. المشكلة الوحيدة هي أنني لم أجد حتى الآن وصفًا بسيطًا وواضحًا لهذه الخوارزميات، ناهيك عن تنفيذها. في هذه المقالة، سأحاول التحدث ببساطة قدر الإمكان عن عائلة خوارزميات Bresenham، وسأقدم أيضًا تعليمات برمجية جاهزة للاستخدام في JavaScript، والتي لا تختلف عمليًا عن التعليمات البرمجية في C/C++. يمكن أخذ الرمز واستخدامه عن طريق كتابة رسالة شكر للمؤلف أولاً.

أود أن أعرب عن مشاعري العميقة والصادقة تجاه مطوري معايير www وأولئك الذين ينفذونها. أحد أشكال كود JavaScript الذي يعمل في جميع المتصفحات المتاحة، على سبيل المثال. لا تتميز IE 6.0 و NN 7.0 و Opera 6.0x بجمالها وتطورها. لكن "هذا لا علاقة له بالعلم الذي أمثله حاليًا".

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

الفكرة الرئيسية للخوارزمية هي أن الخط المراد رسمه يقسم المستوى إلى قسمين. معادلة المنحنى مكتوبة بالشكل Z = f (x,y) . عند جميع نقاط المنحنى Z = 0، وعند النقاط الواقعة فوق المنحنى Z > 0، وعند النقاط الواقعة أسفل المنحنى Z< 0 . Нам известны координаты начала отрезка, то есть точки, заведомо лежащей на искомой кривой. Ставим туда первый пиксель и принимаем Z = 0 . От текущего пикселя можно сделать два шага — либо по вертикали (по горизонтали), либо по диагонали на один пиксель. Конкретные направления шагов выбираются в зависимости от типа линии, которую надо нарисовать. Делая шаг, мы мы вычисляем, как изменятся значение Z:

ΔZ = Z" x Δx + Z" y Δy

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

رسم قطعة خطية

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

وتنقسم الأجزاء المتبقية إلى مجموعتين: الأفقي والرأسي. إذا مثلنا معادلة الخط المستقيم على الصورة y = kx، فإن القطع التي لها |k| ≥ 1، والعمودية - التي |k| منها > 1. من خلال تخصيص قطعة لإحدى المجموعات، يمكننا تبديل إحداثيات النهايات بحيث يتم رسم المقاطع الأفقية دائمًا من اليسار إلى اليمين، ويتم رسم المقاطع الرأسية دائمًا من الأعلى إلى الأسفل.

بالنسبة للمقاطع الأفقية، سيكون كل بكسل جديد 1 على يمين البكسل السابق، ويمكن أيضًا أن يكون أعلى (أقل)، أي. هناك خطوتان ممكنتان - إلى اليمين وإلى اليمين قطريًا. بالنسبة للمقاطع الرأسية، تكون الخطوات المحتملة لأسفل ولأسفل قطريًا.

إذا كانت إحداثيات نهايات المقطع هي (x 1 ,y 1) و (x 2 ,y 2) على التوالي، فمع كل خطوة على طول المحور x يتغير Z بمقدار 1، وعلى طول المحور y - بمقدار (x) 2 -س 1)/(ص 2 -ص 1) . وحتى لا نتعامل مع القسمة ونبقى ضمن حدود حساب الأعداد الصحيحة، سنقوم بتغيير المتغير Z إلى y2-y1 وx2-x1 على التوالي. هذه هي كل الرياضيات، والباقي يمكن فهمه من الكود.

رسم دائرة

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

أولاً، نرسم ثمن الدائرة فقط - من π/2 إلى π/4، وفي الاتجاه المعاكس، أي في اتجاه عقارب الساعة. ويتم الحصول على باقي الدائرة من خلال عكس هذا الجزء بالنسبة إلى مركز الدائرة، والمحورين الأفقي والرأسي، وكذلك الخطوط المستقيمة y = x + b و y = -x + b المارتين بمركز الدائرة .

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

الخطوات الصحيحة هي قطري يمين ويمين، ويعتمد التغيير في Z على قيم x وy، ولكن العلاقة خطية، لذلك لا يلزم إجراء عملية ضرب.

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

حظ سعيد!

إذا كنت تريد مشاهدة عرض توضيحي للخوارزميات في نافذة المتصفح لديك، فيرجى تمكين JavaScript!

×1:ص1:
×2:ص2:
×0:ص0:
ص: