با سلام
من محیط نموداری دایره ای، 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