نمایش نتایج 1 تا 5 از 5

نام تاپیک: رسم نمودار دایره ای بصورت گرافیکی

  1. #1

    رسم نمودار دایره ای بصورت گرافیکی

    سلام
    من یه نمودار دایره ای کشیدم می خوام محدوده زاویه ای که تعیین میکنم رو نشون بده محدوده زاویه بین 0 تا 90 درجه باشه درست کار میکنه ولی اگه خارج از این باشه درست کار نمیکنه و همه محدوده هارو تو 0 تا 90 نشون میده
    مثلا برای بازه 20 تا 110 کدهای زیر رو نوشتم
    private void Form1_Load(object sender, EventArgs e)
    {
    Bitmap bitmap = new Bitmap(pictureBox1.Size.Width, pictureBox1.Size.Height);
    Graphics modelGraphic = Graphics.FromImage(bitmap);

    float radStartPoint = (float)((Math.PI * 100) / 180), radEndPoint = (float)((Math.PI * 150 )/ 180);
    float xStart = (float)(13.6) * (float)Math.Abs(Math.Cos(radStartPoint)), yStart = bitmap.Height - (float)(13.6) * (float)Math.Abs(Math.Sin(radStartPoint));
    float xxStart = (float)(186.4) * (float)Math.Abs(Math.Cos(radStartPoint)), yyStart = bitmap.Height - (float)(186.4) * (float)Math.Abs(Math.Sin(radStartPoint));
    float xEnd = (float)(13.6) * (float)Math.Abs(Math.Cos(radEndPoint)), yEnd = bitmap.Height - (float)(13.6) * (float)Math.Abs(Math.Sin(radEndPoint));
    float xxEnd = (float)(186.4) * (float)Math.Abs(Math.Cos(radEndPoint)), yyEnd = bitmap.Height - (float)(186.4) * (float)Math.Abs(Math.Sin(radEndPoint));

    modelGraphic.FillRectangle(Brushes.White, 0, 0, 500, 500);
    Rectangle rect1 = new Rectangle(100, 100, 200, 200);
    modelGraphic.DrawEllipse(new Pen(Brushes.DarkOliveGreen, (float)(172.8)), rect1);
    modelGraphic.DrawEllipse(new Pen(Brushes.DarkGreen, (float)(144)), rect1);
    modelGraphic.DrawEllipse(new Pen(Brushes.ForestGreen, (float)(115.2)), rect1);
    modelGraphic.DrawEllipse(new Pen(Brushes.Green, (float)(86.4)), rect1);
    modelGraphic.DrawEllipse(new Pen(Brushes.LimeGreen, (float)(57.6)), rect1);
    modelGraphic.DrawEllipse(new Pen(Brushes.LightGreen, (float)(28.8)), rect1);
    modelGraphic.DrawEllipse(new Pen(Brushes.Black, 1), rect1);
    modelGraphic.DrawLine(new Pen(Brushes.White, 1), xStart+200, yStart-220, xxStart+200, yyStart-220);
    modelGraphic.DrawLine(new Pen(Brushes.White, 1), xEnd+200, yEnd-220, xxEnd+200, yyEnd-220);
    pictureBox1.Image = bitmap;
    }


    ولی این نتیجه نمایش نموداره

    19.jpg

    مشکل کجاست؟

  2. #2
    کاربر دائمی
    تاریخ عضویت
    بهمن 1388
    محل زندگی
    تهران
    پست
    249

    نقل قول: رسم نمودار دایره ای بصورت گرافیکی

    سلام
    این دو خط حذف کنید :
     modelGraphic.DrawLine(new Pen(Brushes.White, 1), xStart+200, yStart-220, xxStart+200, yyStart-220);            
    modelGraphic.DrawLine(new Pen(Brushes.White, 1), xEnd+200, yEnd-220, xxEnd+200, yyEnd-220);



    و برای رسم قسمتی از دایره با زاویه ای مشخص از دستور زیر استفاده کنید : برای مثال من یه نیم دایره رسم کردم. 0 تا 180

      modelGraphic.DrawArc(new Pen(Brushes.Red, (float)(172.8)), rect1, 0.0F, 180.0F);


    start angel : نقطه شروع قطاع
    sweep angel : میزان حرکت به جلوی یا نقطه پایان.

  3. #3

    نقل قول: رسم نمودار دایره ای بصورت گرافیکی

    مرسی از راهنماییتون
    تا حدودی به چیزی که میخوام میرسم ولی این جداسازی از جهت موافق عقربه ساعت انجام میشه من میخوام مخالف عقربه ساعت مطابق با نمودار مختصات این جداسازی انجام بشه یه کاری خودم کردم ولی کدهام زیاد شد ولی کلا به چیزی که می خوام رسیدم
    public float xStart, yStart, xxStart, yyStart, xEnd, yEnd, xxEnd, yyEnd;

    private void Form1_Load(object sender, EventArgs e)
    {
    Bitmap bitmap = new Bitmap(pictureBox1.Size.Width, pictureBox1.Size.Height);
    Graphics modelGraphic = Graphics.FromImage(bitmap);
    int startPoint = 20, endPoint = 100;

    float radStartPoint = (float)((Math.PI * startPoint) / 180), radEndPoint = (float)((Math.PI * endPoint )/ 180);
    if (startPoint >= 0 && startPoint <= 90)
    {
    xStart = (float)(13.6) * (float)Math.Abs(Math.Cos(radStartPoint));
    yStart = bitmap.Height - (float)(13.6) * (float)Math.Abs(Math.Sin(radStartPoint));
    xxStart = (float)(186.4) * (float)Math.Abs(Math.Cos(radStartPoint));
    yyStart = bitmap.Height - (float)(186.4) * (float)Math.Abs(Math.Sin(radStartPoint));
    }
    else if (startPoint > 90 && startPoint <= 180)
    {
    xStart = (float)(-13.6) * (float)Math.Abs(Math.Cos(radStartPoint));
    yStart = bitmap.Height - (float)(13.6) * (float)Math.Abs(Math.Sin(radStartPoint));
    xxStart = (float)(-186.4) * (float)Math.Abs(Math.Cos(radStartPoint));
    yyStart = bitmap.Height - (float)(186.4) * (float)Math.Abs(Math.Sin(radStartPoint));
    }
    else if (startPoint > 180 && startPoint <= 270)
    {
    xStart = (float)(-13.6) * (float)Math.Abs(Math.Cos(radStartPoint));
    yStart = bitmap.Height - (float)(-13.6) * (float)Math.Abs(Math.Sin(radStartPoint));
    xxStart = (float)(-186.4) * (float)Math.Abs(Math.Cos(radStartPoint));
    yyStart = bitmap.Height - (float)(-186.4) * (float)Math.Abs(Math.Sin(radStartPoint));
    }
    else if (startPoint > 270 && startPoint < 360)
    {
    xStart = (float)(13.6) * (float)Math.Abs(Math.Cos(radStartPoint));
    yStart = bitmap.Height - (float)(-13.6) * (float)Math.Abs(Math.Sin(radStartPoint));
    xxStart = (float)(186.4) * (float)Math.Abs(Math.Cos(radStartPoint));
    yyStart = bitmap.Height - (float)(-186.4) * (float)Math.Abs(Math.Sin(radStartPoint));
    }

    if (endPoint >= 0 && endPoint <= 90)
    {
    xEnd = (float)(13.6) * (float)Math.Abs(Math.Cos(radEndPoint));
    yEnd = bitmap.Height - (float)(13.6) * (float)Math.Abs(Math.Sin(radEndPoint));
    xxEnd = (float)(186.4) * (float)Math.Abs(Math.Cos(radEndPoint));
    yyEnd = bitmap.Height - (float)(186.4) * (float)Math.Abs(Math.Sin(radEndPoint));
    }
    else if (endPoint > 90 && endPoint <= 180)
    {
    xEnd = (float)(-13.6) * (float)Math.Abs(Math.Cos(radEndPoint));
    yEnd = bitmap.Height - (float)(13.6) * (float)Math.Abs(Math.Sin(radEndPoint));
    xxEnd = (float)(-186.4) * (float)Math.Abs(Math.Cos(radEndPoint));
    yyEnd = bitmap.Height - (float)(186.4) * (float)Math.Abs(Math.Sin(radEndPoint));
    }
    else if (endPoint > 180 && endPoint <= 270)
    {
    xEnd = (float)(-13.6) * (float)Math.Abs(Math.Cos(radEndPoint));
    yEnd = bitmap.Height - (float)(-13.6) * (float)Math.Abs(Math.Sin(radEndPoint));
    xxEnd = (float)(-186.4) * (float)Math.Abs(Math.Cos(radEndPoint));
    yyEnd = bitmap.Height - (float)(-186.4) * (float)Math.Abs(Math.Sin(radEndPoint));
    }
    else if (endPoint > 270 && endPoint <= 360)
    {
    xEnd = (float)(13.6) * (float)Math.Abs(Math.Cos(radEndPoint));
    yEnd = bitmap.Height - (float)(-13.6) * (float)Math.Abs(Math.Sin(radEndPoint));
    xxEnd = (float)(186.4) * (float)Math.Abs(Math.Cos(radEndPoint));
    yyEnd = bitmap.Height - (float)(-186.4) * (float)Math.Abs(Math.Sin(radEndPoint));
    }

    modelGraphic.FillRectangle(Brushes.White, 0, 0, 500, 500);
    Rectangle rect1 = new Rectangle(100, 100, 200, 200);
    modelGraphic.DrawEllipse(new Pen(Brushes.DarkOliveGreen, (float)(172.8)), rect1);
    modelGraphic.DrawEllipse(new Pen(Brushes.DarkGreen, (float)(144)), rect1);
    modelGraphic.DrawEllipse(new Pen(Brushes.ForestGreen, (float)(115.2)), rect1);
    modelGraphic.DrawEllipse(new Pen(Brushes.Green, (float)(86.4)), rect1);
    modelGraphic.DrawEllipse(new Pen(Brushes.LimeGreen, (float)(57.6)), rect1);
    modelGraphic.DrawEllipse(new Pen(Brushes.LightGreen, (float)(28.8)), rect1);
    modelGraphic.DrawEllipse(new Pen(Brushes.Black, 1), rect1);
    modelGraphic.DrawLine(new Pen(Brushes.White, 1), xStart+200, yStart-220, xxStart+200, yyStart-220);
    modelGraphic.DrawLine(new Pen(Brushes.White, 1), xEnd+200, yEnd-220, xxEnd+200, yyEnd-220);
    pictureBox1.Image = bitmap;
    }

  4. #4
    کاربر دائمی
    تاریخ عضویت
    بهمن 1388
    محل زندگی
    تهران
    پست
    249

    نقل قول: رسم نمودار دایره ای بصورت گرافیکی

    سلام
    اگه می خواهید کمان ، عکس حرکت عقربه های ساعت ترسیم بشه ، پارامتر دوم رو (sweep angel) منفی بدید.

  5. #5

    نقل قول: رسم نمودار دایره ای بصورت گرافیکی

    با سلام
    من محیط نموداری دایره ای، 0 تا 360 درجه که بخشی را با توجه به بازه زاویه تعیین شده جدا می کند رسم کردم نمودار از نظر گسترش به قسمتهایی برای مشخص کردن سرعت تقسیم شده است محور مرکزی که بخش بالایی آن حرکت در جهت موافق و بخش پایینی حرکت در جهت معکوس را نشان میدهد با خطی به رنگ مشکی در وسط محیط نمودار رسم شده است.

    21.jpg

    Bitmap bitmap = new Bitmap(pictureBox1.Size.Width, pictureBox1.Size.Height);
    Graphics modelGraphic = Graphics.FromImage(bitmap);
    int startPoint = 20, endPoint = 100;
    //int point = 80, speed = 10;

    float radStartPoint = (float)((Math.PI * startPoint) / 180), radEndPoint = (float)((Math.PI * endPoint )/ 180);
    if (startPoint >= 0 && startPoint <= 90)
    {
    xStart = (float)(13.6) * (float)Math.Abs(Math.Cos(radStartPoint));
    yStart = bitmap.Height - (float)(13.6) * (float)Math.Abs(Math.Sin(radStartPoint));
    xxStart = (float)(186.4) * (float)Math.Abs(Math.Cos(radStartPoint));
    yyStart = bitmap.Height - (float)(186.4) * (float)Math.Abs(Math.Sin(radStartPoint));
    }
    else if (startPoint > 90 && startPoint <= 180)
    {
    xStart = (float)(-13.6) * (float)Math.Abs(Math.Cos(radStartPoint));
    yStart = bitmap.Height - (float)(13.6) * (float)Math.Abs(Math.Sin(radStartPoint));
    xxStart = (float)(-186.4) * (float)Math.Abs(Math.Cos(radStartPoint));
    yyStart = bitmap.Height - (float)(186.4) * (float)Math.Abs(Math.Sin(radStartPoint));
    }
    else if (startPoint > 180 && startPoint <= 270)
    {
    xStart = (float)(-13.6) * (float)Math.Abs(Math.Cos(radStartPoint));
    yStart = bitmap.Height - (float)(-13.6) * (float)Math.Abs(Math.Sin(radStartPoint));
    xxStart = (float)(-186.4) * (float)Math.Abs(Math.Cos(radStartPoint));
    yyStart = bitmap.Height - (float)(-186.4) * (float)Math.Abs(Math.Sin(radStartPoint));
    }
    else if (startPoint > 270 && startPoint < 360)
    {
    xStart = (float)(13.6) * (float)Math.Abs(Math.Cos(radStartPoint));
    yStart = bitmap.Height - (float)(-13.6) * (float)Math.Abs(Math.Sin(radStartPoint));
    xxStart = (float)(186.4) * (float)Math.Abs(Math.Cos(radStartPoint));
    yyStart = bitmap.Height - (float)(-186.4) * (float)Math.Abs(Math.Sin(radStartPoint));
    }

    if (endPoint >= 0 && endPoint <= 90)
    {
    xEnd = (float)(13.6) * (float)Math.Abs(Math.Cos(radEndPoint));
    yEnd = bitmap.Height - (float)(13.6) * (float)Math.Abs(Math.Sin(radEndPoint));
    xxEnd = (float)(186.4) * (float)Math.Abs(Math.Cos(radEndPoint));
    yyEnd = bitmap.Height - (float)(186.4) * (float)Math.Abs(Math.Sin(radEndPoint));
    }
    else if (endPoint > 90 && endPoint <= 180)
    {
    xEnd = (float)(-13.6) * (float)Math.Abs(Math.Cos(radEndPoint));
    yEnd = bitmap.Height - (float)(13.6) * (float)Math.Abs(Math.Sin(radEndPoint));
    xxEnd = (float)(-186.4) * (float)Math.Abs(Math.Cos(radEndPoint));
    yyEnd = bitmap.Height - (float)(186.4) * (float)Math.Abs(Math.Sin(radEndPoint));
    }
    else if (endPoint > 180 && endPoint <= 270)
    {
    xEnd = (float)(-13.6) * (float)Math.Abs(Math.Cos(radEndPoint));
    yEnd = bitmap.Height - (float)(-13.6) * (float)Math.Abs(Math.Sin(radEndPoint));
    xxEnd = (float)(-186.4) * (float)Math.Abs(Math.Cos(radEndPoint));
    yyEnd = bitmap.Height - (float)(-186.4) * (float)Math.Abs(Math.Sin(radEndPoint));
    }
    else if (endPoint > 270 && endPoint < 360)
    {
    xEnd = (float)(13.6) * (float)Math.Abs(Math.Cos(radEndPoint));
    yEnd = bitmap.Height - (float)(-13.6) * (float)Math.Abs(Math.Sin(radEndPoint));
    xxEnd = (float)(186.4) * (float)Math.Abs(Math.Cos(radEndPoint));
    yyEnd = bitmap.Height - (float)(-186.4) * (float)Math.Abs(Math.Sin(radEndPoint));
    }

    modelGraphic.FillRectangle(Brushes.White, 0, 0, 500, 500);
    Rectangle rect = new Rectangle(100, 100, 200, 200);
    modelGraphic.DrawEllipse(new Pen(Brushes.DarkOliveGreen, (float)(172.8)), rect);
    modelGraphic.DrawEllipse(new Pen(Brushes.DarkGreen, (float)(144)), rect);
    modelGraphic.DrawEllipse(new Pen(Brushes.ForestGreen, (float)(115.2)), rect);
    modelGraphic.DrawEllipse(new Pen(Brushes.Green, (float)(86.4)), rect);
    modelGraphic.DrawEllipse(new Pen(Brushes.LimeGreen, (float)(57.6)), rect);
    modelGraphic.DrawEllipse(new Pen(Brushes.LightGreen, (float)(28.8)), rect);
    modelGraphic.DrawEllipse(new Pen(Brushes.Black, 1), rect);
    modelGraphic.DrawLine(new Pen(Brushes.White, 1), xStart+200, yStart-220, xxStart+200, yyStart-220);
    modelGraphic.DrawLine(new Pen(Brushes.White, 1), xEnd+200, yEnd-220, xxEnd+200, yyEnd-220);
    pictureBox1.Image = bitmap;
    //DrawPoint(bitmap, modelGraphic, point, speed);


    حالا میخوام خطی رو با توجه به محل قرار گیری در یک زاویه مشخص و طول خط برابر با مقدار سرعت حرکت در اون زاویه روی نمودار رسم کنم و می خوام این خط با توجه به حرکت در جهت موافق که سرعت مثبته و حرکت در خلاف جهت که سرعت منفی هست رسم کنم این کار انجام میشه ولی میخوام ابتدای خط روی محور مرکزی بیفته تو کدهام چه تغییری ایجاد کنم تا به نتیجه دلخواه برسم.

    public void DrawPoint(Bitmap bitmap, Graphics modelGraphic, int point, int speed)
    {
    float rad = (float)(Math.PI * point / 180);
    if (point >= 0 && point <= 90)
    {
    x = (float)13.6 * (float)Math.Abs(Math.Cos(rad));
    y = bitmap.Height - (float)186.4 * (float)Math.Abs(Math.Sin(rad));
    xx = ((float)13.6 + 3 * speed) * (float)Math.Abs(Math.Cos(rad));
    yy = bitmap.Height - ((float)186.4 + 3 * speed) * (float)Math.Abs(Math.Sin(rad));
    }
    else if (point > 90 && point <= 180)
    {
    x = -(float)13.6 * (float)Math.Abs(Math.Cos(rad));
    y = bitmap.Height - (float)186.4 * (float)Math.Abs(Math.Sin(rad));
    xx = -((float)13.6 + 3 * speed) * (float)Math.Abs(Math.Cos(rad));
    yy = bitmap.Height - ((float)186.4 + 3 * speed) * (float)Math.Abs(Math.Sin(rad));
    }
    else if (point > 180 && point <= 270)
    {
    x = -(float)13.6 * (float)Math.Abs(Math.Cos(rad));
    y = bitmap.Height + (float)186.4 * (float)Math.Abs(Math.Sin(rad));
    xx = -((float)13.6 + 3 * speed) * (float)Math.Abs(Math.Cos(rad));
    yy = bitmap.Height + ((float)186.4 + 3 * speed) * (float)Math.Abs(Math.Sin(rad));
    }
    else if (point > 270 && point < 360)
    {
    x = (float)13.6 * (float)Math.Abs(Math.Cos(rad));
    y = bitmap.Height + (float)186.4 * (float)Math.Abs(Math.Sin(rad));
    xx = ((float)13.6 + 3 * speed) * (float)Math.Abs(Math.Cos(rad));
    yy = bitmap.Height + ((float)186.4 + 3 * speed) * (float)Math.Abs(Math.Sin(rad));
    }
    if (speed > 0)
    {
    modelGraphic.DrawLine(new Pen(Brushes.Black, 4), x+200, y-133, xx+200, yy-133);
    }
    else
    {
    modelGraphic.DrawLine(new Pen(Brushes.Red, 4), x+200, y-133, xx+200, yy-133);
    }
    }


    مثلا خط تو زاویه 90 سرعت 10 مثل شکل زیر رسم میشه 22.jpg
    ولی وقتی میخوام خط در زاویه 20 با سرعت 10 رسم بشه این شکلی میشه 23.jpg
    می خوام رسم این شکلی باشه 24.jpg

تاپیک های مشابه

  1. سوال: مشکل در رسم نمودار دایره ای در open gl
    نوشته شده توسط majidariamanesh در بخش برنامه نویسی با زبان C و ++C
    پاسخ: 3
    آخرین پست: جمعه 06 اردیبهشت 1392, 10:04 صبح
  2. سوال: رسم نمودار دایره ای در سی شارپ
    نوشته شده توسط minamorsali در بخش C#‎‎
    پاسخ: 8
    آخرین پست: شنبه 22 بهمن 1390, 23:11 عصر
  3. رسم دایره در محیط گرافیکی C
    نوشته شده توسط Artakhshatra در بخش برنامه نویسی با زبان C و ++C
    پاسخ: 23
    آخرین پست: دوشنبه 04 بهمن 1389, 08:11 صبح
  4. سوال: رسم نمودار گرافیکی
    نوشته شده توسط rash44 در بخش PHP
    پاسخ: 4
    آخرین پست: پنج شنبه 04 تیر 1388, 19:12 عصر
  5. رسم نمودار با استفاده از نقطه یا دایره
    نوشته شده توسط sajadkkVB در بخش برنامه نویسی در 6 VB
    پاسخ: 1
    آخرین پست: پنج شنبه 24 شهریور 1384, 04:17 صبح

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •