PDA

View Full Version : مبتدی: رسم نمودار در گرافیک



adel28
پنج شنبه 20 تیر 1392, 22:24 عصر
برنامه ای بنویسید که 5 عدد تصادفی بین 0 تا 100 ایجاد کند و نمودار دایره ای مربوط به آن را در 5 رنگ رسم کند؟
اعداد تصادفی را ایجاد کردم.
5 عدد تصادفی ایجدا شده، چطور میتوانیم این 5 عدد را در نمودار قرار داد؟

Pis7Aller
پنج شنبه 20 تیر 1392, 23:32 عصر
اگه منظورت رو درست فهمیده باشم برای دو عدد دلخواه این میشه واسه 5 تا مثل همینه دقیقا .....
const int r = 200;
Point center = new Point(300, 300);
private void button1_Click(object sender, EventArgs e)
{
int j = 1 ;
Pen p = new Pen(Color.Red, 1);
Pen p2 = new Pen(Color.Blue, 4);
Pen p3 = new Pen(Color.Yellow, 4);
Graphics g = this.CreateGraphics();
double x, y;
g.DrawEllipse(p, 100, 100, 400, 400);
int a1 = 55, a2 = 45,t1,t2;
t1 = (a1 * 36) / 5;
for (int i=0; i < t1; i++)
{
y = Math.Sin(i*3.14/360)*r;
x = Math.Cos(i * 3.14 / 360) * r;
g.DrawLine(p2, center.X, center.Y, (int)(300 + x), (int)(300 - y));
j = i;
}
t2 = (a2 * 36) / 5 + j;
for (int i=j; i < t2; i++)
{
y = Math.Sin(i * 3.14 / 360) * r;
x = Math.Cos(i * 3.14 / 360) * r;
g.DrawLine(p3, center.X, center.Y, (int)(300 + x), (int)(300 - y));
}
شرمنده کدش اصلا بهینه نیست فقط خواستم سریع بزنم ببینی چطوری .

khokhan
پنج شنبه 20 تیر 1392, 23:35 عصر
برنامه ای بنویسید که 5 عدد تصادفی بین 0 تا 100 ایجاد کند و نمودار دایره ای مربوط به آن را در 5 رنگ رسم کند؟
اعداد تصادفی را ایجاد کردم.
5 عدد تصادفی ایجدا شده، چطور میتوانیم این 5 عدد را در نمودار قرار داد؟
.................................درسته!!!

CsharpNevisi
جمعه 21 تیر 1392, 00:11 صبح
.................................درسته!!!

دمت گرم خدایی کارت خیلی درسته
فقط میشه کداشو توضیح بدی که حلقه ها متغییر ها و ... کلا خط به خط کدا واسه چین ... ؟؟؟؟ خیلی آقایی.. !!!
int elements = 5;
Random r = new Random();

List<double> xValues = new List<double>();
double currentX = 0;
for (int i = 0; i < elements; i++)
{
xValues.Add(currentX);
currentX = currentX + r.Next(1,100);
}

List<double> yValues = new List<double>();
for (int i = 0; i < elements; i++)
{
yValues.Add(r.Next(0, 100));
}


chart1.Series.Clear();

var series = chart1.Series.Add("MySeries");
series.ChartType = System.Windows.Forms.DataVisualization.Charting.Se riesChartType.Doughnut;


DateTime baseDate = DateTime.Today;
for (int i = 0; i < xValues.Count; i++)
{
var xDate = baseDate.AddSeconds(xValues[i]);
var yValue = yValues[i];
series.Points.AddXY(xDate, yValue);
}


chart1.ChartAreas[series.ChartArea].AxisX.Interval = 100.0;
chart1.ChartAreas[0].AxisX.IntervalType = System.Windows.Forms.DataVisualization.Charting.Da teTimeIntervalType.Minutes;
chart1.ChartAreas["ChartArea1"].Area3DStyle.Enable3D = true;
chart1.ChartAreas[0].AxisX.LabelStyle.Format = "HH:mm:ss";

khokhan
جمعه 21 تیر 1392, 00:24 صبح
میشه کداشو توضیح بدی که حلقه ها متغییر ها و ... کلا خط به خط کدا واسه چین ... ؟؟؟؟ تعداد ارقام رو تعریف کردیم
int elements = 5;

نمونه سازی از کلاس راندوم
Random r = new Random();

تعریف لیست سری x چارت
List<double> xValues = new List<double>();
double currentX = 0;
for (int i = 0; i < elements; i++)
{
xValues.Add(currentX);
currentX = currentX + r.Next(1,100);
}


تعریف لیست سری y چارت
List<double> yValues = new List<double>();
for (int i = 0; i < elements; i++)
{
yValues.Add(r.Next(0, 100));
}





این هم موجودی چارت رو پاک می کنه تا اطلاعات جدید وارد شه
chart1.Series.Clear();

دریافت وارسال تاریخ امروز به چارتواختصاص آن به عنوان سری xسری
var series = chart1.Series.Add("MySeries");
series.ChartType = System.Windows.Forms.DataVisualization.Charting.Se riesChartType.Doughnut;


DateTime baseDate = DateTime.Today;
for (int i = 0; i < xValues.Count; i++)
{
var xDate = baseDate.AddSeconds(xValues[i]);
var yValue = yValues[i];
series.Points.AddXY(xDate, yValue);
}



این هم برای شکیل شدن و در فرمت مورد دلخواه قرار گرفتن چارت
chart1.ChartAreas[series.ChartArea].AxisX.Interval = 100.0;
chart1.ChartAreas[0].AxisX.IntervalType = System.Windows.Forms.DataVisualization.Charting.Da teTimeIntervalType.Minutes;
chart1.ChartAreas["ChartArea1"].Area3DStyle.Enable3D = true;
chart1.ChartAreas[0].AxisX.LabelStyle.Format = "HH:mm:ss";

CsharpNevisi
جمعه 21 تیر 1392, 00:31 صبح
حقیقتش نفهمیدم .... !!! :لبخند:
مثلا اینجا این چیه
var series = chart1.Series.Add("MySeries");
یا لیست سری x چارت و لیست سری y چار چی هست .. ؟؟؟؟
از این یه تیکه فقط اسم چارتو فهمیدم ... !!!! :لبخند:
chart1.ChartAreas[series.ChartArea].AxisX.Interval = 100.0;
chart1.ChartAreas[0].AxisX.IntervalType = System.Windows.Forms.DataVisualization.Charting.Da teTimeIntervalType.Minutes;
chart1.ChartAreas["ChartArea1"].Area3DStyle.Enable3D = true;
chart1.ChartAreas[0].AxisX.LabelStyle.Format = "HH:mm:ss";
اگه یه مقدمه ای چیزی بعد یه کوچولو ریز توضیح بدی خیلی اقایی و یا این که اصلا واس چی از لیست استفاده کردی (من با لیست اشنایی ندارم) .. !!!
اقا کلا من اونجاهایی رو که متغییر تعریف کردیو فهمیدم ... ممکنه از مبتدی شروع کنی ؟؟؟؟؟ خیلی ممنونت میشم

khokhan
جمعه 21 تیر 1392, 00:41 صبح
حقیقتش نفهمیدم .... !!! :لبخند:
مثلا اینجا این چیه
var series = chart1.Series.Add("MySeries");
یا لیست سری x چارت و لیست سری y چار چی هست .. ؟؟؟؟
از این یه تیکه فقط اسم چارتو فهمیدم ... !!!! :لبخند:
chart1.ChartAreas[series.ChartArea].AxisX.Interval = 100.0;
chart1.ChartAreas[0].AxisX.IntervalType = System.Windows.Forms.DataVisualization.Charting.Da teTimeIntervalType.Minutes;
chart1.ChartAreas["ChartArea1"].Area3DStyle.Enable3D = true;
chart1.ChartAreas[0].AxisX.LabelStyle.Format = "HH:mm:ss";
اگه یه مقدمه ای چیزی بعد یه کوچولو ریز توضیح بدی خیلی اقایی و یا این که اصلا واس چی از لیست استفاده کردی (من با لیست اشنایی ندارم) .. !!!
اقا کلا من اونجاهایی رو که متغییر تعریف کردیو فهمیدم ... ممکنه از مبتدی شروع کنی ؟؟؟؟؟ خیلی ممنونت میشم

هر چارتی یه سری رقم عمودی داره ویه سری رقم افقی که ما در اینجا به جای عمودی و افقی می گیم x و y مفهومه ؟؟؟؟:لبخند:

حالا
این یه سطر معین می کنه که چارت ما گرد باشه و اگه اون تکه آخری بعد از دات ( . ) رو عوض کنی شکلش عوض می شه :


chart1.ChartAreas[0].AxisX.IntervalType = System.Windows.Forms.DataVisualization.Charting.Da teTimeIntervalType.Minutes;

این یه سطر هم معین می کنه که چارت ما سه بعدی باشه و ضایع جلوه نکنه :لبخند:

chart1.ChartAreas["ChartArea1"].Area3DStyle.Enable3D = true;

این یه سطر هم اینتر وال رو تعین می کنه :
chart1.ChartAreas[series.ChartArea].AxisX.Interval = 100.0;

این یه سطر هم فرمت اون 5 تا لیبل رو که ما می گیم نمایه و کنار چارت هستند رو تعیین می کنه


chart1.ChartAreas[0].AxisX.LabelStyle.Format = "HH:mm:ss";

CsharpNevisi
جمعه 21 تیر 1392, 00:53 صبح
اینترول چارت چیه ؟؟؟ به چه درد میخوره ؟؟؟
for (int i = 0; i < xValues.Count; i++)
{
var xDate = baseDate.AddSeconds(xValues[i]);
var yValue = yValues[i];
series.Points.AddXY(xDate, yValue);
}
خو اینا واس چین ؟؟؟ ... یعنی مثلا
xValues.Add(currentX);
اگه ننویسیم چه اتفاقی میوفته ... چارت چه شکلی میشه ؟؟؟
یا چرا
chart1.ChartAreas[0].AxisX.IntervalType = System.Windows.Forms.DataVisualization.Charting.Da teTimeIntervalType.Minutes;
اینو نوشتی و
chart1.ChartAreas[0].AxisX.LabelStyle.Format = "HH:mm:ss";
ننویسیم چی میشه ؟؟؟؟؟؟
با ما مثل خودت مهندس نیستیم سطح پایین همه کدهارو توضیح بده لطفا ... !!!:قلب:

khokhan
جمعه 21 تیر 1392, 01:08 صبح
اینترول چارت چیه ؟؟؟ به چه درد میخوره ؟؟؟
for (int i = 0; i < xValues.Count; i++)
{
var xDate = baseDate.AddSeconds(xValues[i]);
var yValue = yValues[i];
series.Points.AddXY(xDate, yValue);
}
خو اینا واس چین ؟؟؟ ... یعنی مثلا
xValues.Add(currentX);
اگه ننویسیم چه اتفاقی میوفته ... چارت چه شکلی میشه ؟؟؟
یا چرا
chart1.ChartAreas[0].AxisX.IntervalType = System.Windows.Forms.DataVisualization.Charting.Da teTimeIntervalType.Minutes;
اینو نوشتی و
chart1.ChartAreas[0].AxisX.LabelStyle.Format = "HH:mm:ss";
ننویسیم چی میشه ؟؟؟؟؟؟
با ما مثل خودت مهندس نیستیم سطح پایین همه کدهارو توضیح بده لطفا ... !!!:قلب:

ببینین ما وقتی به یه سری از چارت یه شماره راندم یا همون تصادفی تعریف می کنیم سری دیگه همیشه ثابت می مونه یعنی هر بار که شما دکمه رو فشار می دین سری عمودی رو که به اعداد تصادفی اختصاص دادین عوض می شه اما سری افقی همیشه ثابت می مونه و بی معنی می شه

اما برای اینکه این حالت پیش نیاد سری افقی رو هم به تاریخ سیستم وصل وی کنین تا دقیقه به دقیقه عوض بشه مفهومه ؟؟؟؟؟؟؟؟؟

مثلا در این تکه سری x رو می شمریم و یه دون می زاریم روش و می گیم که هر دفعه که این کار رو کردی تاریخ سیستم رو بیار و در سری y قرار بده
for (int i = 0; i < xValues.Count; i++)
{
var xDate = baseDate.AddSeconds(xValues[i]);
var yValue = yValues[i];
series.Points.AddXY(xDate, yValue);
}

اینتر وال هم برای اینه که ما از کل تاریخ سیستم دقیقه هارو برمی داریم و مثل تایمر بایستی براش اینتر وال تعریف کنیم تا دقیقه استخراج بشه

chart1.ChartAreas[0].AxisX.IntervalType = System.Windows.Forms.DataVisualization.Charting.Da teTimeIntervalType.Minutes;
در مورد اون تکه آخر هم اگه ننویسین خوب نمایه ها رو نشون نمی ده و اگه عوضش کنین فرمت ش عوض می شه

CsharpNevisi
جمعه 21 تیر 1392, 01:13 صبح
حقیقتش من خیلی شیفته این چارته شدم ............. ولی اینطوری چیزی نفهمیدم :لبخند:
دیگه چشمام باز نمیشه ... !!!
این تایپیکو لینک میکنم و بهش سر میزنم .... !!!
اگه لطف کنید و یه فیلم اموزشی درست کنید خیلی در حقم لطف کردی ... خیلی ممنون مهندس ... !!!:قلب:
خیــــــــــلی آقایی

adel28
جمعه 21 تیر 1392, 16:14 عصر
.................................درسته!!!

مرسی از کد تون.
ولی بدون Chart و فقط با استفاده از توابع گرافیکی میخوام این کار رو انجام بدم.

CsharpNevisi
جمعه 21 تیر 1392, 18:17 عصر
.................................درسته!!!

حد اقل یه لینکی چیزی از منبع اموزشی بده .... !!! :گریه:

khokhan
جمعه 21 تیر 1392, 18:36 عصر
مرسی از کد تون.
ولی بدون Chart و فقط با استفاده از توابع گرافیکی میخوام این کار رو انجام بدم.
................................................ لینک (http://www.codeproject.com/Articles/9318/Drawing-a-Dynamic-Chart-in-C)

لینک (http://codereflex.net/charts-graphs-in-c-sharp/)

لینک (http://www.codeproject.com/Articles/5431/A-flexible-charting-library-for-NET)

لینک (http://www.codeguru.com/csharp/csharp/cs_graphics/chartsandgraphing/article.php/c6145/Creating-Simple-Charts-and-Graphs.htm)