PDA

View Full Version : سوال: رسم دو تا نیم دایره و تعیین محدوده



elahe1393
چهارشنبه 07 آبان 1393, 13:02 عصر
سلام
من با گرافیک کامپیوتری زیاد آشنا نیستم در حال حاضر می خوام دو تا نیم دایره بکشم که یه فاصله ای بین هم دارند و در ضمن در میان فاصله بینشون دوتا خط یه بازه ای رو جدا کرده برای کشیدن این شکل چکار باید انجام دهم لطفا راهنماییم کنید
یه همچین شکلی که میخوام گوشه سمت چپ پایین یه picturebox باشه
125080

elahe1393
چهارشنبه 07 آبان 1393, 14:34 عصر
من با کدهای زیر تونستم دوتا نیم دایره رو رسم کنم
public void DrawChart()
{
Bitmap bitmap = new Bitmap(pbxLeft.Size.Width, pbxLeft.Size.Height, PixelFormat.Format32bppArgb);
Graphics ModelGraphic = Graphics.FromImage(bitmap);
Pen CirclePen = new Pen(Color.Blue, 2);
Rectangle Rect = new Rectangle(-50, pbxLeft.Size.Height-50, 100, 100);
Rectangle Rect1 = new Rectangle(-70, pbxLeft.Size.Height - 70, 140, 140);
ModelGraphic.DrawEllipse(CirclePen, Rect);
ModelGraphic.DrawEllipse(CirclePen, Rect1);
pbxLeft.Image = bitmap;
}

حالا چطور دو تا خط رو برای تعیین محدوده رسم کنم یعنی می خوام دو تا خط که بازه زاویه ای بین 0 تا 90 تعیین می شود مثلا بازه زاویه 20 تا 50 را با دو خط مشخص کنم که از مبدا شروع می شود یک خط زاویه 20 و خط دیگر زاویه 50 را نشان میدهد چه کنم لطفا راهنمایی کنید

pedram.11
چهارشنبه 07 آبان 1393, 15:11 عصر
سلام بفرمائید:
125086
int w = 2;
int radius = 100;
int distance = 10;
int radius2 = radius - distance;
Bitmap b = new Bitmap(pictureBox1.Width, pictureBox1.Height);
Graphics g = Graphics.FromImage(b);
g.FillRectangle(Brushes.White, 0, 0, b.Width, b.Height);
//
int deg1 = 60;
int deg2 = 30;
float rad1 = (float)(Math.PI * deg1 / 180);
float rad2 = (float)(Math.PI * deg2 / 180);
float x1 = radius2 * (float)Math.Abs(Math.Cos(rad1)), y1 = b.Height - radius2 * (float)Math.Abs(Math.Sin(rad1));
float x2 = radius * (float)Math.Abs(Math.Cos(rad1)), y2 = b.Height - radius * (float)Math.Abs(Math.Sin(rad1));
float x3 = radius2 * (float)Math.Abs(Math.Cos(rad2)), y3 = b.Height - radius2 * (float)Math.Abs(Math.Sin(rad2));
float x4 = radius * (float)Math.Abs(Math.Cos(rad2)), y4 = b.Height - radius * (float)Math.Abs(Math.Sin(rad2));


g.DrawArc(new Pen(Brushes.Blue, distance), -radius + distance / 2, b.Height - radius + distance / 2, radius * 2 - distance, radius * 2 - distance, 10, -110);
g.DrawArc(new Pen(Brushes.LightBlue, distance), -radius + distance / 2, b.Height - radius + distance / 2, radius * 2 - distance, radius * 2 - distance, -(deg2), (deg2 - deg1));


g.DrawLine(new Pen(Brushes.Black, w), x1, y1, x2, y2);
g.DrawLine(new Pen(Brushes.Black, w), x3, y3, x4, y4);


g.DrawEllipse(new Pen(Brushes.Black, w), -radius, b.Height - radius, radius * 2, radius * 2);
g.DrawEllipse(new Pen(Brushes.Black, w), -radius2, b.Height - radius2, radius2 * 2, radius2 * 2);


pictureBox1.Image = b;
پروژه:

elahe1393
چهارشنبه 07 آبان 1393, 15:25 عصر
باورم نمیشه :متعجب: همون چیزیه میخواستم
البته اینو باید گسترش بدم
آفرین مرسی هرچی بگم بازم کمه ممنون :تشویق::تشویق::تشویق::تشویق: