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

تاريخ
-----

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

الخوارزمية
----------

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

سوف تعرف الخوارزمية بالبداية من أجل ثمانية يكون فيها قطعة الخط المستقيم تتجه باتجاه الأسفل واليمين (*x*0≤*x*1 and *y*0≤*y*1)، ويكون مسقطها الأفقي {\displaystyle x\_{1}-x\_{0}} أطول من مسقطها العمودي {\displaystyle y\_{1}-y\_{0}} (أو أن ميل المستقيم يكون أقل من 1 وأكبر من 0). في هذه الثمانية فإنه من أجل أي عمود *x* بين {\displaystyle x\_{0}} و{\displaystyle x\_{1}}، يوجد عمود وحيد *y* (يتم حسابه من قبل الخوارزمية) يحتوي النقطة الواقعة على المستقيم، بينما كل صف بين {\displaystyle y\_{0}} و{\displaystyle y\_{1}} ربما يحتوي على بضعة نقاط مرسومة.

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

**خطأ رياضيات (SVG (يمكن تمكين MathML عبر البرنامج المساعد للمتصفح): رد غير صحيح ("Math extension cannot connect to Restbase.") من الخادم "http://localhost:6011/ar.wikipedia.org/v1/":): {\displaystyle y - y\_0 = \frac{y\_1-y\_0}{x\_1-x\_0} (x-x\_0).}**

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

{\displaystyle {\frac {y\_{1}-y\_{0}}{x\_{1}-x\_{0}}}(x-x\_{0})+y\_{0}.}
يعتمد الميل {\displaystyle (y\_{1}-y\_{0})/(x\_{1}-x\_{0})} على إحدثيات نقاط النهاية فقط ومن الممكن إعادة حسابه بشكل مسبق، والقيم المثالية ل *y* بشكل تتابع من الممكن حسابها بالبدء عند {\displaystyle y\_{0}} وإضافة الميل بشكل متكرر.

في الكود البرمجي التالي، يقوم التابع *plot(x,y)* برسم النقاط وتعطي abs القيمة المطلقة:

```
**function** line(x0, x1, y0, y1)
  *int* deltax = x1 - x0
  *int* deltay = y1 - y0
  *real* error = 0
  *real* deltaerr = deltay / deltax  // Assume deltax != 0 (line is not vertical),
     // note that this division needs to be done in a way that preserves the fractional part
  *int* y = y0
  **for** x **from** x0 **to** x1
    plot(x,y)
    error = error + deltaerr
    **if** abs(error) ≥ 0.5 **then**
      y = y + 1
      error = error - 1.0
```

انظر أيضاً
----------

* خوارزمية رسم مستقيم

مراجع
-----

1. ↑  "معلومات عن خوارزمية بريزنهام لرسم مستقيم على موقع rosettacode.org". rosettacode.org. مؤرشف من الأصل في 2019-03-20.

|  |  |
| --- | --- |
| مشاريع شقيقة | في كومنز صور وملفات عن: خوارزمية بريزنهام لرسم مستقيم |

* أيقونة بوابةبوابة صور رقمية
* أيقونة بوابةبوابة خوارزميات
* أيقونة بوابةبوابة رياضيات
* أيقونة بوابةبوابة علم الحاسوب