الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

اين الخطا فى الكود ده

بدأه TheSniper102 في 18 مايو 2011 · 14 رد · 667 مشاهدة · في Microsoft Visual C#.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

الكود اللى انا كاتبه ده الغرض منه رسم مستطيل بس بيطلع غلط ياريت حد يساعدنى فى انى اعرف فين الخطا

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace rectangle
{
	public partial class Form1 : Form
	{
    	public Form1()
    	{
        	InitializeComponent();
    	}

    	private void button1_Click(object sender, EventArgs e)
    	{

        	rect();
    	}
  public  void  line(int x1, int x2, int y1, int y2)
    	{
        	Graphics g = pictureBox1.CreateGraphics();
        	Bitmap bm = new Bitmap(pictureBox1.Width, pictureBox1.Height);
        	int deltay, deltax, d1;
        	y2 = int.Parse(textBox1.Text);
        	y1 = int.Parse(textBox2.Text);
        	x2 = int.Parse(textBox3.Text);
        	x1 = int.Parse(textBox4.Text);

        	deltay = y2 - y1;
        	deltax = x2 - x1;
        	d1 = 2 * deltay - deltax;
        	for (int x = x1; x1 <= x2; x++)
        	{

            	if (d1 >= 0)
            	{
                	d1 = d1 + 2 * deltay - 2 * deltax;
                	y1++;
            	}
            	else
            	{
                	d1 = d1 + 2 * deltay;
            	}
            	g.DrawImage(bm, new Point(0, 0));
          	bm.SetPixel(x, y1, Color.Wheat);

        	}
  }

 public void rect()
 {

 	int x1, x2, y1, y2;
 	line(x1,y1,x2,y1);
 	line(x1, y2, x2, y2);
 	line(x1, y2, x1, y1);
 	line(x2, y2, x2, y1);
 }
    	}
	}

تم تعديل هذه المشاركة بواسطة TheSniper102 في 18 مايو 2011 في 08:24

#2

السلام عليكم ورحمة الله وبركاته

اخي الكريم المشكلة عندك في namespace

using system.linq

المفروض انها هتبقى using System.Data.Linq

وبعدين هتضيف Reference

من خلال الخطوات دي

- Solution Explorer

- Right Click on Reference Add Reference

- وبعدين هتختار System.Data.Linq > OK

وان شاء الله هيشتغل .

#3

السلام عليكم ورحمه الله وبركاته

اخي جرب الكود التالي بدلا من الرسم نقطه نقطه


g.DrawRectangle(Pens.Black,x1,y1,x2,y2);

.:: Wish to become better and better ::.

#4
VB Helper كتب:

السلام عليكم ورحمه الله وبركاته

اخي جرب الكود التالي بدلا من الرسم نقطه نقطه


g.DrawRectangle(Pens.Black,x1,y1,x2,y2);

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

#5

السلام عليكم ورحمه الله وبركاته

اخي اذا كنت تريد ان تعملها باستخدام النقاط فأرجو منك مراجعه الخوارزمية جيدا لان برنامجك لا يتوافق معها .. يمكنك متابعة الرابط التالي http://www.google.com/search?sclient=psy&hl=en&site=&source=hp&q=bresenham+algorithm+for+line+drawing&btnI=I%27m+Feeling+Lucky&aq=f&aqi=&aql=&oq= وستعرف المشكله في برنامجك

.:: Wish to become better and better ::.

#6

الكود بعد التعديل بس المشكله انه بيرسم خط وليس مستطيل ما الحل

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms;  namespace draw_rectangle2 {     public partial class Form1 : Form     {         public Form1()         {             InitializeComponent();         }          private void rectangle_btn_Click(object sender, EventArgs e)         {             draw_rectangles();                     } // drawing line using line equation and 2 points         public void draw_line(int x1, int x2, int y1, int y2)         {             Graphics g = pictureBox1.CreateGraphics();             Bitmap bm = new Bitmap(pictureBox1.Width, pictureBox1.Height);              x1 = int.Parse(textBox1.Text);             x2 = int.Parse(textBox2.Text);             y1= int.Parse(textBox3.Text);              y2 = int.Parse(textBox4.Text);              int y;              double m, b;              m = (y2 - y1) / (x2 - x1);              b = y1 - (m * x1);              for (int x = x1; x <= x2; x++)              {                  y = (int)((m * x) + B);                  bm.SetPixel(x, y, Color.Black);              }              g.DrawImage(bm, new Point(0, 0));                       }         public void draw_rectangles()         {             int x1 = 0;             int x2 = 0;            int y1 = 0;            int y2 = 0;             draw_line(x1,y2,x2,y2);             draw_line(x1, y1, x2, y1);             draw_line(x1, y1, x1, y2);             draw_line(x2, y1, x2, y2);          }     } }
#7

السلام عليكم ورحمه الله وبركاته

اخي هذ الكود اللازم لعمل خط


int dx, dy,sx,sy,err,e2;
dx = Math.Abs(x2 - x1);
dy = Math.Abs(y2 - y1);
if (x1 < x2)
sx = 1;
else
sx = -1;
if (x1 < x2)
sy = 1;
else
sy = -1;
err = dx - dy;
while(true)
{
bm.SetPixel(x1, y1, Color.Black);
if (x1 == x2 && y1 == y2) break;
e2 = 2 * err;
if (e2 > -dy)
{
err -= dy;
x1 += sx;
}
if (e2 < -dx)
{
err += dx;
y1 += sy;
}
}
g.DrawImage(bm, new Point(0, 0));

اما لعمل مستطيل تحتاج الى اربع نقاط وليست نقطتين كما عملت في مثالك

.:: Wish to become better and better ::.

#8
VB Helper كتب:

السلام عليكم ورحمه الله وبركاته

اخي هذ الكود اللازم لعمل خط


int dx, dy,sx,sy,err,e2;
dx = Math.Abs(x2 - x1);
dy = Math.Abs(y2 - y1);
if (x1 < x2)
sx = 1;
else
sx = -1;
if (x1 < x2)
sy = 1;
else
sy = -1;
err = dx - dy;
while(true)
{
bm.SetPixel(x1, y1, Color.Black);
if (x1 == x2 && y1 == y2) break;
e2 = 2 * err;
if (e2 > -dy)
{
err -= dy;
x1 += sx;
}
if (e2 < -dx)
{
err += dx;
y1 += sy;
}
}
g.DrawImage(bm, new Point(0, 0));

اما لعمل مستطيل تحتاج الى اربع نقاط وليست نقطتين كما عملت في مثالك

طب ممكن كود المستطيل؟

#9

السلام عليكم ورحمه الله وبركاته

اخي فقط عليك استخدام اربع نقاط x1,y1,x2,y2,x3,y3,x4,y4 ومن ثم استخدم الكود التالي


line(x1,y1,x2,y2);
line(x2,y2,x3,y3);
line(x3,y3,x4,y4);
line(x4,y4,x1,y1);

.:: Wish to become better and better ::.

#10

اخى الكريم ارجو ان تمعن النظر اننى لم استخدم طريقه برسنهام التى استخدمتها انت بل استخدمت ابسط الطرق لرسم الخط المستقيم الا وهى طريقه الميل ونقطتين

حيث رمزت للميل بالرمز m ونقطه التقاطع مع محور الصادات بالرمز b ومن ثما كانت المعادلات كالاتى

m=(y2-y1)/(x2-x1) // فرق اللصادات على فرق السينات














using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace draw_rectangle2
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void rectangle_btn_Click(object sender, EventArgs e)
{
draw_rectangles();

}
public void draw_line(int x1, int x2, int y1, int y2)
{
Graphics g = pictureBox1.CreateGraphics();
Bitmap bm = new Bitmap(pictureBox1.Width, pictureBox1.Height);
x1 = int.Parse(textBox1.Text);
x2 = int.Parse(textBox2.Text);
y1= int.Parse(textBox3.Text);
y2 = int.Parse(textBox4.Text);
int y;
double m, b;
m = (y2 - y1) / (x2 - x1);
b = y1 - (m * x1);
for (int x = x1; x <= x2; x++)
{
y = (int)((m * x) + b);
bm.SetPixel(x, y, Color.Black);
}
g.DrawImage(bm, new Point(0,0));


}
public void draw_rectangles()
{
int x1 = 0;
int x2 = 0;
int y1 = 0;
int y2 = 0;
int x3 = 0, x4 = 0,y3=0,y4=0;
x3 = int.Parse(textBox5.Text);
x4 = int.Parse(textBox6.Text);
y3 = int.Parse(textBox7.Text);
y4 = int.Parse(textBox8.Text);


draw_line (x1,y1,x2,y2);
draw_line(x2,y2,x3,y3);
draw_line(x3,y3,x4,y4);
draw_line(x4, y4, x1, y1);

}
}
}
b = y1 - (m * x1  );                                                                                عوضت باحدى النقط ولتكن (x1,y1)
using System;

ارجو تجربه الكود على جهازك ثم ان تاتى لى بالحل السليم لرسم مستطيل وشكرا على اهتمامك

#11

السلام عليكم ورحمه الله وبركاته

اخي الي اعرفه يمكن رسم خط بدلاله نقطة و ميل حسب المعادله التالي y=mx+b اما طريقتك تمام بس لو كان x1,x2 متساويان بيكون الميل غير معرف؟!!

ثاني حاجه انا اسئت فهم المثال لأن اربع نقاط سوف ترسم مضلع لرسم مستطيل يكفينا نقطه وطول المستطيل وعرضه .. جرب الكود الذي ارفقته

draw_rectangle2.zip

.:: Wish to become better and better ::.

#12
VB Helper كتب:

السلام عليكم ورحمه الله وبركاته

اخي الي اعرفه يمكن رسم خط بدلاله نقطة و ميل حسب المعادله التالي y=mx+b اما طريقتك تمام بس لو كان x1,x2 متساويان بيكون الميل غير معرف؟!!

ثاني حاجه انا اسئت فهم المثال لأن اربع نقاط سوف ترسم مضلع لرسم مستطيل يكفينا نقطه وطول المستطيل وعرضه .. جرب الكود الذي ارفقته

شكرا اخى الكريم تم التجربه واشتغل الحمد لله اتمنى لك التوفيق فى حياتك

#13

السلام عليكم ورحمة الله وبركاته

لاشكر على واجب اخي ...

.:: Wish to become better and better ::.

#14

طيب ممكن شرح للبرنامج اللى حضرتك عملته ده وليه عملت 8 تكست بوكس انا عارف انى المفروض استقبل من اليوزر

x1,x2,y1,y2,h,w

ايه بقى الاتنين التانين دول؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟

ياريت شرح الكود

#15

السلام عليكم ورحمه الله وبركاته

اخي مالهم لزمه اصلا نسيتهم من الرد السابق ...

.:: Wish to become better and better ::.

مواضيع مشابهة