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 ومن ثم تقوم بذلك لجيرانه حتى يتم فحص كل البكسلات الموجودة داخل الحدود. |