Другие языки программирования и технологии

принадлежит ли точка X отрезку АВ на паскале

дана строка с координатами точки и координаты отрезка (x1,y1) , (x2,y2) надо проверить принадлежит ли точка отрезку.
if abs(sqrt(sqr(x1-x3)+sqr(y1-y3)) + sqrt(sqr(x2-x3)+sqr(y2-y3)) - sqrt(sqr(x2-x1)+sqr(y2-y1))) <0.01 then writeln('Принадлежит');

Где (x3,y3) - координаты точки X
Если сравнивать AX + BX и AB то программа не всегда будет выдавать правильный результат, так как используем вещественные числа, для этого вводим модуль разности между AX + BX и A и допустимую погрешность 0.01, с погрешностью поэкспериментируй сам
Нуралы Мамадалиев
Нуралы Мамадалиев
5 500
Лучший ответ
Сначала задачу надо решить математически. Надо составить уравнение прямой, а потом проверять, принадлежит ли точка прямой. Уравнение прямой y=ax+b
Т. к. точки (x1, y1), (x2,y2) принадлежат этой прямой, то для них выполняется это равенство:
y1=ax1+b
y2=ax2+b
От первого отнимаем второе, получаем y1-y2=a(x1-x2). Отсюда a=(y1-y2)/(x1-x2).
Находим b. Для этого сложим два уравнения. Получим
y1+y2=a(x1+x2)+2b
b=((y1+y2)-a(x1+x2))/2
Точка (x3,y3) принадлежит прямой с координатами (x1,y1) , (x2,y2), если y3=ax3+b. Но a и b мы уже вычислили. Поэтому программа будет такой:
program zadacha;
var x1,y1,x2,y2,x3,y3,a,b: real;
begin
writeln('Введите координаты x1,y1');
readln(x1,y1);
writeln('Введите координаты x2,y2');
readln(x2,y2);
writeln('Введите координаты x3,y3');
readln(x3,y3);
a:=(y1-y2)/(x1-x2);
b:=((y1+y2)-a*(x1+x2))/2;
if (y3 = a*x3+b) and (x3 > x1) and (x3 < x2) or (y3 = a*x3+b) and (x2 > x1) and (x3 < x1)
then writeln('Точка принадлежит отрезку')else writeln('Точка не принадлежит отрезку')
end.
Юрий Сураегин
Юрий Сураегин
56 353
function Q(ax,ay,bx,by,cx,cy:integer):real
begin
return (cy-ay)*(bx-ax)-(cx-ax)*(by-ay);
end;

A(ax,ay) - в твоем случае x1,y1
B(bx,by) - x3,y3
C(cx,cy) - координаты твоей точки.

Если функция Q возвращает результат 0, то точка принадлежит отрезку

Похожие вопросы