این یک نمونه از روشهایی هست که من بیشتر برا اینجور کارا دوست دارم یکم باید ریاضی دوران دبیرستان رو دوره بکنیم چیز خاصی نداره :
public double RadToDeg(double radians)
{
return radians * (180 / Math.PI);
//return radians;
}
public double GetAngle(double x1,double x2,double y1,double y2)
{
double t;
if (x2 - x1 == 0)
{
if (y2 - y1 == 0)
t = 90;
else
t = -90;
}
else
{
t = RadToDeg(Math.Atan((y2 - y1) / (x2 - x1)));
if ((t < 0) && (x2 - x1 < 0)) t = 180 + t;
else
if (t > 0 && (x2 - x1 < 0)) t = 180 + t;
else
if (t == 0 && x2 - x1 < 0) t = 180;
}
return t;
}
public double DegToRad(double Degrees)
{
return Degrees * (Math.PI / 180); ;
}
public void DrawFlesh(Graphics g, Pen p, PointF p1, PointF p2,int degree,int arr)
{
double a = GetAngle(p2.X, p1.X, p2.Y, p1.Y);
PointF pt1 = new PointF((float)(p2.X + arr * Math.Cos(DegToRad(a + degree))),(float)(p2.Y+arr*Math.Sin(DegToRad(a+deg ree))));
PointF pt2=new PointF((float)(p2.X+arr*Math.Cos(DegToRad(a-degree))),(float)(p2.Y+arr*Math.Sin(DegToRad(a-degree))));
GraphicsPath gp = new GraphicsPath();
gp.StartFigure();
gp.AddLine(p2, pt1);
gp.AddLine(pt1, pt2);
gp.AddLine(pt2, p2);
gp.CloseAllFigures();
SolidBrush sb = new SolidBrush(p.Color);
g.FillPath(sb, gp);
gp.Dispose();
sb.Dispose();
//at the end draw the line
g.DrawLine(p, p1, p2);
}
اینم یک نمونه آزمایش از تست تابع :
Pen p=new Pen(Color.Red);
Graphics g=this.CreateGraphics();
Point p1=new Point(10,10);
Point p2=new Point(100,100);
DrawFlesh(g,p,p1,p2,20,40);
فقط چند تا نکته اولین ورودی تابع جایگاهی هست که باید روی آن رسم صورت بگیرد
دومین ورودی قلمی هست که برای رسم استفاده می شود
سومین و چهارمین ورودی مختصات ابتدا و انتها فلش هست
و پنجمین ورودی اندازه زاویه انحراف سر فلش نصب به خط هست
آخرین ورودی ارتفاع سر فلش روی خط فلش می باشد.
عیدتون مبارک و انشا الله سال خوبی داشته باشید.
موفق باشید.