void diagram::paintline(int x1, int y1, int x2, int y2, TColor l_color, AnsiString sign){
px_->Pen->Width=1;
px_->Pen->Color=l_color;
px_->MoveTo(left+xc+x1,top+yc-y1); px_->LineTo(left+xc+x2,top+yc-y2);
if ( sqrt( pow((x2-x1)*1.0,2)+pow((y2-y1)*1.0,2) ) < dl ) return;
double alf;
int dx1,dy1,dx2,dy2,dx3,dy3;
int x2a = x2-x1, y2a = y2-y1;
if (x2a) alf=fabs(atan( (float)y2a/x2a ));
else alf=M_PI_2;
dx1 = dl*cos(alf + yg); dy1 = dl*sin(alf + yg);
dx2 = dl*cos(alf - yg); dy2 = dl*sin(alf - yg);
dx3 = 2*dl*cos(alf); dy3 = 2*dl*sin(alf);
if ( x2a<0 ) {dx1= -dx1; dx2 = -dx2; dx3 = -dx3; };
if ( y2a<0 ) {dy1= -dy1; dy2 = -dy2; dy3 = -dy3; };
px_->MoveTo(left+xc+x2,top+yc-y2); px_->LineTo(left+xc+(x2-dx1),top+yc-(y2-dy1));
px_->MoveTo(left+xc+x2,top+yc-y2); px_->LineTo(left+xc+(x2-dx2),top+yc-(y2-dy2));
px_->TextOutA(left+xc+x2-dx3, top+yc-y2+dy3, sign);
};
нарисовать стрелку
Народ, подскажите как стрелку нарисовать. то есть известны две точки отрезка, нужно вокруг второй нарисовать треугольник повернутый на угол равный углу этого отрезка. :confused:
const int lh = 100;//Длина стрелки
int xc = 244;//Центр по X (начало стрелки)
int yc = 244;//Центр по Y (начало стрелки)
double u;
u = var;//Переменная задающая угол
Ledgrid->Canvas->MoveTo(xc,yc);
X1 = xc + (lh*cos(u));
Y1 = yc - (lh*sin(u));
Ledgrid->Canvas->Pen->Color = clRed;
Ledgrid->Canvas->LineTo(X1, Y1);
мне известны координаты отрезка AB, получается мне нужно вычислить две точки C и D, которые вместе с точкой B образуют маленький треугольник CBD, для которого AB является биссектрисой. я так понимаю здесь нужно как-то угол сначала определить меж AB и осью иксов
:eek: неужели єто такая сложная задача?
Цитата: Гудвин
:eek: неужели єто такая сложная задача?
Нет. Не сложная. Можно напрямую рассчитать координаты 2-ч точек треугольника, а можно считать, что отрезок лежит на оси Ox, а затем осуществить поворот координат.
ЗЫ Угол у треугольника какой?
с углом тоже сложно :rolleyes: углов я вообще не знаю. у меня изначально есть к примеру только две точки, точка А(25,50) и точка B(57,80), по ним на экране рисуется отрезок и мышкой отдельно каждую из этих точек можно передвигать. так вот как не отрезок а стрелку нарисовать то? может угол меж AB и осью иксов как-то через arcsin arccos вычислять? я так примерно прикинул но глючно чтот получается
о и в правду может стоить эти точки C и D рассматривать как отрезок перпендикулярный отрезку AB? как построить прямую перпендикулярную данной?
Почитайте краткий курс аналитической геометрии (Ильин, Позняк и иже с ними), там все написано.
даа... тяжко это. надо было в школе изучать :D
Специально для ленивых...
Код:
пару комментариев
left, top - точка на форме - центр системы координат (обычной), в которой рисуется линия
px_ - указатель на TCanvas, санва от формы берется
dl примерно равно 20 эт длина уса стрелки что ли , не помню
вот
#define dl 20
#define yg M_PI/12.0
Спасибо! :)