• Курсы Академии Кодебай, стартующие в мае - июне, от команды The Codeby

    1. Цифровая криминалистика и реагирование на инциденты
    2. ОС Linux (DFIR) Старт: 16 мая
    3. Анализ фишинговых атак Старт: 16 мая Устройства для тестирования на проникновение Старт: 16 мая

    Скидки до 10%

    Полный список ближайших курсов ...

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

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

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);//основанная линия
 
W

whiter4bbit

int x1=e.getVertex1().getX(), x2=e.getVertex2().getX();
int y1=e.getVertex1().getY(), y2=e.getVertex2().getY();
double r=Math.sqrt(Math.pow(x1-x2,2)+Math.pow(y1-y2,2));
double cos=(x1-x2)/(double)r;
double sin=Math.sqrt(1-cos*cos);
if(y2>y1) sin=-sin;
x1=x1+15-(int)(15*cos); x2=x2+15+(int)(15*cos);
y1= y1+15-(int)(15*sin); y2=y2+15+(int)(15*sin);
g.drawLine(x1, y1, x2, y2);
double k=20*Math.cos(Math.PI/6+Math.acos(cos));
double z=20*Math.sin(Math.PI/6+Math.acos(cos));
if(y2>y1) z=-z;
double yz=y2+z;
double xz=x2+k;
g.drawLine(x2, y2,(int)xz,(int)yz);
k=20*Math.cos(Math.PI/6-Math.acos(cos));
z=20*Math.sin(Math.PI/6-Math.acos(cos));
if(y2>y1) z=-z;
yz=y2-z;
xz=x2+k;
g.drawLine(x2, y2,(int)xz,(int)yz);

линия "со стрелочкой"
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!