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

Тема в разделе ".NET", создана пользователем JTOne, 28 апр 2007.

Статус темы:
Закрыта.
  1. JTOne

    JTOne Гость

    Подскажите как нарисовать стрелочку, т.е. 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);//основанная линия
     
  2. mms

    mms Гость

    Вот:

    Код (Text):
            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));
    }
    }
     
Загрузка...
Похожие Темы - Рисование стрелочки
  1. ilya00
    Ответов:
    17
    Просмотров:
    1.784
  2. vladden
    Ответов:
    1
    Просмотров:
    1.844
  3. 123456789igor
    Ответов:
    1
    Просмотров:
    1.394
  4. sergg
    Ответов:
    11
    Просмотров:
    4.700
  5. bearpaw
    Ответов:
    6
    Просмотров:
    3.776
Статус темы:
Закрыта.

Поделиться этой страницей