43 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			43 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| ---
 | |
| title: Boundary Fill
 | |
| localeTitle: تعبئة الحدود
 | |
| ---
 | |
| ## تعبئة الحدود
 | |
| 
 | |
| التعبئة الحدودية هي الخوارزمية المستخدمة بشكل متكرر في رسومات الكمبيوتر لملء اللون المطلوب داخل مضلع مغلق له نفس الحدود اللون لجميع جوانبها.
 | |
| 
 | |
| يعتبر تنفيذ الخوارزمية الأكثر تقارباً دالة متكررة تستند إلى مكدس.
 | |
| 
 | |
| ### العمل:
 | |
| 
 | |
| المشكلة بسيطة جدًا وتتبع عادةً الخطوات التالية:
 | |
| 
 | |
| 1.  خذ موضع نقطة البداية ولون الحدود.
 | |
| 2.  قرّر منطقيًا تريد الذهاب في 4 اتجاهات (N، S، W، E) أو 8 اتجاهات (N، S، W، E، NW، NE، SW، SE).
 | |
| 3.  اختر لون تعبئة.
 | |
| 4.  السفر في تلك الاتجاهات.
 | |
| 5.  إذا كانت وحدة البكسل التي تصل إليها ليست لون التعبئة أو لون الحدود ، فاستبدلها بلون التعبئة.
 | |
| 6.  كرر 4 و 5 حتى تكون في كل مكان داخل الحدود.
 | |
| 
 | |
| ### قيود معينة:
 | |
| 
 | |
| *   يجب أن يكون اللون الحدودي هو نفسه لجميع حواف المضلع.
 | |
| *   يجب أن تكون نقطة البداية داخل المضلع.
 | |
| 
 | |
| ### رمز مقتطف:
 | |
| 
 | |
|  `void boundary_fill(int pos_x, int pos_y, int boundary_color, int fill_color) 
 | |
|  { 
 | |
|    current_color= getpixel(pos_x,pos_y);  //get the color of the current pixel position 
 | |
|    if( current_color!= boundary_color || currrent_color != fill_color) // if pixel not already filled or part of the boundary then 
 | |
|    { 
 | |
|      putpixel(pos_x,pos_y,fill_color);  //change the color for this pixel to the desired fill_color 
 | |
|      boundary_fill(pos_x + 1, pos_y,boundary_color,fill_color);  // perform same function for the east pixel 
 | |
|      boundary_fill(pos_x - 1, pos_y,boundary_color,fill_color);  // perform same function for the west pixel 
 | |
|      boundary_fill(pos_x, pos_y + 1,boundary_color,fill_color);  // perform same function for the north pixel 
 | |
|      boundary_fill(pos_x, pos_y - 1,boundary_color,fill_color);  // perform same function for the south pixel 
 | |
|     } 
 | |
|  } 
 | |
| ` 
 | |
| 
 | |
| من الكود المعطى يمكنك أن ترى أنه لأي بكسل تصله ، عليك أولا التحقق مما إذا كان يمكن تغييره إلى fill\_color ومن ثم تقوم بذلك لجيرانه حتى يتم فحص كل البكسلات الموجودة داخل الحدود. |