Рисование стрелочки

  • Автор темы JTOne
  • Дата начала
Статус
Закрыто для дальнейших ответов.
J

JTOne

Гость
#1
Подскажите как нарисовать стрелочку, т.е. 1 линию я рисую drawLine(x1,y1,x2,y2), потом мне нужно нарисовать еще две линии которые будут делать из моей линии стрелочку, логично предположить что две начальные координаты будут совпадать с двумя первыми мое линии, а как найти второй x и y.

Ту незадача в том, что я не знаю под каким углом будет лежать моя линия, я перехожу из декартовой в полярную систему и нахожу свои x и y, но когда линия относительно вертикальная что то даже похоже получается :), но когда я рисую горизонтальную 2 линии мое стрелочки уходят кудато, подскажите че делать?

Вот код:

d=Math.sqrt( Math.pow(x2-x1,2)+Math.pow(y2-y1,2) );
ygolCos=Math.abs((x2-x1)/d);
ygolSin=Math.abs((y2-y1)/d);

int ny=1;


if(y1<y2)
ny=-1;
else
ny=1;



float f1x2=Float.valueOf(String.valueOf(ny*40*(ygolCos+Math.cos(20))+(x2+100)));
float f1y2=Float.valueOf(String.valueOf(ny*40*(ygolSin+Math.sin(20))+(y2+100)));

float f2x2=Float.valueOf(String.valueOf(ny*40*(ygolCos-Math.cos(20))+(x2+100)));
float f2y2=Float.valueOf(String.valueOf(ny*40*(ygolSin-Math.sin(20))+(y2+100)));



g.drawLine(x2+100,y2+100,Math.round(f1x2),Math.round(f1y2));//линии стерлочек
g.drawLine(x2+100,y2+100,Math.round(f2x2),Math.round(f2y2));//линии стерлочек




g.drawLine(x1+100,y1+100,x2+100,y2+100);//основанная линия
 
M

mms

Гость
#2
Вот:

Код:
		public void DrawArrow(Graphics g, int startX, int startY, int endX, int endY, double arrowAngleInPercent, double arrowLength)
{
if (startX == endX)
{
return;
}

double arrowAngle = Math.PI * arrowAngleInPercent / 180.0;

Pen pen = new Pen(Color.Black);
g.DrawLine(pen, startX, startY, endX, endY);

double angle = Math.Atan((double)(startY - endY) / (double)(endX - startX));

if (startX > endX)
{
g.DrawLine(pen, endX, endY, endX + (int)Math.Round(Math.Cos(angle + arrowAngle) * arrowLength), 
endY - (int)Math.Round(Math.Sin(angle + arrowAngle) * arrowLength));
g.DrawLine(pen, endX, endY, endX + (int)Math.Round(Math.Cos(angle - arrowAngle) * arrowLength), 
endY - (int)Math.Round(Math.Sin(angle - arrowAngle) * arrowLength));
}
else
{
g.DrawLine(pen, endX, endY, endX - (int)Math.Round(Math.Cos(angle + arrowAngle) * arrowLength), 
endY + (int)Math.Round(Math.Sin(angle + arrowAngle) * arrowLength));
g.DrawLine(pen, endX, endY, endX - (int)Math.Round(Math.Cos(angle - arrowAngle) * arrowLength), 
endY + (int)Math.Round(Math.Sin(angle - arrowAngle) * arrowLength));
}
}
 
Статус
Закрыто для дальнейших ответов.