Naeel Maqsudov писал(а):Стрелка - это треугольник. Одна вершина известна. Координаты двух других, как ни крути, придется вычислить.
да, это я уже понял)))
вот входные параметры это x1,y1,x2,y2,s,s1
void line1(TImage *imag1,float x1, float y1, float x2, float y2,float s, float s1)
{
float a,b,x3,y3,al,a1,b1;
//если горизонтальная или вертикальная линия
if((x1==x2)||(y1==y2))
{
float x3,y3,x4,y4,x5,y5;
if(x1==x2)
{
if(y1>y2)
{x3=x1; y3=y2+s;};
if(y2>y1)
{x3=x1; y3=y2-s;};
y4=y3; y5=y3;
x4=x3-(s1/2); x5=x3+(s1/2);
};
if(y1==y2)
{
if(x1>x2)
{y3=y1; x3=x2+s;};
if(x2>x1)
{y3=y1; x3=x2-s;};
x4=x3; x5=x3;
y4=y3-(s1/2); y5=y3+(s1/2);
};
//теперь нарисуем
TPoint points[]={
Point(x1,y1),
Point(x3,y3),
Point(x4,y4),
Point(x2,y2),
Point(x5,y5),
Point(x3,y3)};
imag1->Canvas->Pen->Color=clBlack;
imag1->Canvas->Brush->Color=clBlack;
imag1->Canvas->Polygon(points, 5);
imag1->Canvas->Brush->Color=clWhite;
return;
}
//находим x3,y3
a=y2-y1;
b=x2-x1;
if(b==0) {al=3.14;} else {al=atan(a/b);}
int kof1=1;
a1=s*sin(al);
b1=s*cos(al);
if (b>0) {kof1=-1;} else {kof1=1;};
x3=x2+kof1*b1;
y3=y2+kof1*a1;
//находим x4,y4,x5,y5
//уравнение прямой: A*x+B*y+C=0
//где A=y2-y1; B=x1-x2; C=x1*y2-x2*y1;
//Уравнение перпендикуляра из точки (x3,y3) B*x-A*y+C2=0
//где C2=A*y3-B*x3;
float A,B,C2;
A=y2-y1; B=x1-x2; C2=A*y3-B*x3;
float y11,y22,x4,y4,x5,y5;
if (A!=0)
{y11=(B*x1+C2)/A; y22=(B*x2+C2)/A;}
else
{y11=0; y22=0;}
a=y22-y11;
b=x2-x1;
s1=s1/2;
if(b==0) {al=3.14;} else {al=atan(a/b);};
a1=s1*sin(al);
b1=s1*cos(al);
x4=x3+b1;
y4=y3+a1;
x5=x3-b1;
y5=y3-a1;
//теперь нарисуем
TPoint points[]={
Point(x1,y1),
Point(x3,y3),
Point(x4,y4),
Point(x2,y2),
Point(x5,y5),
Point(x3,y3)};
imag1->Canvas->Pen->Color=clBlack;
imag1->Canvas->Brush->Color=clBlack;
imag1->Canvas->Polygon(points, 5);
imag1->Canvas->Brush->Color=clWhite;
};