Сегодня мы рассмотрим еще одну типовую задачу из серии геометрические алгоритмы. Напишем функцию, которая будет проверять принадлежность произвольной точки отрезку, заданному координатами своего начала и конца.
Для реализации операций сравнения над вещественными данными напишем еще две функции: функцию EqPoint(), которая ,будет проверять, совпадают ли две точки на плоскости и функцию RealMoreEq() , которую будем использовать для проверки отношения «>=» (больше или равно). Причина ввода специальных функций нам уже известна.
Задача. Проверить, принадлежит ли точка отрезку.
Пусть точки — начальная и конечные точки отрезка. — произвольная точка на плоскости.
Вектор с началом в точке и концом в точке будет иметь координаты (x2-x1, y2-y1).
Если P(x, y) – произвольная точка, то координаты вектора равны: (x-x1, y – y1).
Точка Р будет принадлежать отрезку если:
- Векторы в и коллинеарны (равно нулю их векторное произведение):
, т.е. (x-x1)(y2-y1)-(y-y1)(x2-x1) = 0 - Абсцисса точки P удовлетворяет условию: или . Иначе точка будет находиться на прямой левее или правее отрезка.
Program geom3; Const _Eps: Real = 1e-3; var x1,y1,x2,y2,x,y:real; Function RealEq(Const a, b:Real):Boolean; begin RealEq := Abs(a-b) Function RealMoreEq(Const a, b:Real):Boolean; begin RealMoreEq := a — b >= _Eps End; Function EqPoint(x1,y1,x2,y2:real):Boolean; begin EqPoint:=RealEq(x1,x2)and RealEq(y1,y2) end; Function AtOtres(x1,y1,x2,y2,x,y:real):Boolean; Begin If EqPoint( x1,y1,x2,y2) Then AtOtres:= EqPoint( x1,y1,x,y) Else AtOtres := RealEq((x-x1)*(y2-y1)- (y-y1)*(x2-x1),0)and (RealMoreEq(x,x1)and RealMoreEq( x2,x)Or RealMoreEq(x,x2)and RealMoreEq( x1,x)) end; begin writeln(Введите координаты точек: x1,y1,x2,y2,x,y’); readln( x1,y1,x2,y2,x,y); if AtOtres(x1,y1,x2,y2,x,y) then writeln(‘Да.’) else writeln(‘Нет.); end.
Определить принадлежность точки Д310
Результаты выполнения программы.
Введите координаты точек: x1, y1, x2, y2, x,y
0.5 1 2.5 2.8 1.203 1.633
Да.
Результаты тестирования в программе GeoGebra:
Сегодня мы написали функцию AtOtres() , которая проверяет принадлежность произвольной точки отрезку, заданному своими координатами.
Ввели еще две функции: EqPoint() и RealMoreEq() для реализации операций сравнения над вещественными данными. Первая проверяет, совпадают ли две точки на плоскости, вторая — используется для проверки отношения «>=».
На следующем уроке, на основе ранее написанных процедур, напишем процедуру определения координат точки пересечения двух отрезков.
На этом я с вами прощаюсь. До встречи на следующем уроке.
Источник: gospodaretsva.com
Определить принадлежность точки отрезку — Pascal
Дана точка с координатами (x,y), требуется определить принадлежность точки отрезку (a,b).
Определение принадлежности точки x отрезку [a,b] на языке программирования Паскаль с условием
Код к задаче: «Определить принадлежность точки отрезку»
Листинг программы
uses crt; const t=0.001; var ax,ay,bx,by,x,y,p:real; begin clrscr; writeln(‘Введите координаты отрезка:’); readln(ax,ay,bx,by); writeln(‘Введите координаты точки’); readln(x,y); if ax=bx then if (x=ax) and(((y<=ay)and(y>=by))or((y>=ay)and(y<=by))) then write(‘Принадлежит’) else write(‘Не принадлежит’) else begin p:=(x-bx)/(ax-bx); if (abs(p*ay+(1-p)*by-y)=0)and(p<=1))then write(‘Принадлежит’) else write(‘Не принадлежит’); end; readln end.
Источник: studassistent.ru
что надо вписывать в скобках чтоб программа получилась в приложении паскаль?
program n_9;
var x,a,b:real;
begin
writeln(‘определение принадлежности точки отрезку’);
write(‘введите a, b>>’);
readln(a,b);
write(‘введите x>>’);
readln(x);
if (x>=a) and (x<=b)then
writeln(‘точка принадлежит отрезку’)
else writeln(‘точка не принадлежит отрезку’)
end.
Ответы
Автор ответа: aiaoaiaiaoaaaaaooo
Ответ:
writeln(‘определение принадлежности точки отрезку’);
else writeln(‘точка не принадлежит отрезку’);
Объяснение:
нужна была тчк с запятой после действия в else, в этом была ошибка. (еще ни разу не видела, чтобы переменные в паскале вводили через запятую, так что не рискуй.)
а это советы на будущее:
нормальные скобки в условиях.
Источник: sous-otvet.net