Проверка принадлежности точки прямой заданой двумя точками.
|
|
Вводятся координаты трех точек. Проверить что третья точка пренадлежит прямой которая проходит через первые две. Добавлено (07.11.12, 02:03) --------------------------------------------- program prjamaja; {Проверка принадлежности точки прямой заданой двумя точками. ¶Версия 1.1 06.11.2012г. umbr@ mortis}
var x,y,z,x1,y1,z1,x2,y2,z2,i,j,k:real;
begin writeln('Проверка принадлежности точки прямой заданой двумя точками.'); writeln('Введите координаты первой точки в пространстве через пробел'); readln(x1,y1,z1); writeln('Введите координаты второй точки в пространстве через пробел'); readln(x2,y2,z2); writeln('Введите координаты проверяемой точки в пространстве через пробел'); readln(x,y,z); i:=(x-x1)*(y2-y1)*(z2-z1); j:=(y-y1)*(x2-x1)*(z2-z1); k:=(z-z1)*(x2-x1)*(y2-y1); if i=j then begin if i=k then writeln('Проверяемая точка пренадлежит прямой проведенной через 2 заданые точки.') else writeln('Проверяемая точка не пренадлежит прямой проведенной через 2 заданые точки.'); end else writeln('Проверяемая точка не пренадлежит прямой проведенной через 2 заданые точки.'); end.
|
|
|
Quote (umbra111mortis) program prjamaja; Вообще говоря можно было обойтись одним оператором if. Это для начала.
|
|
|
program tochki; {Даны 2 точки, которые образуют прямую. Программа определяет принадлежность 3-ей точки прямой. Версия 1.0 07.11.12 г. jester } var x1,x2,x3,y1,y2,y3,S:real; begin writeln('Введите координаты 1-ой точки на плоскости через пробел'); readln(x1,y1); writeln('Введите координаты 2-ой точки на плоскости через пробел'); readln(x2,y2); writeln('Введите координаты 3-й точки на плоскости через пробел'); readln(x3,y3); S:=(x1-x3)*(y2-y3)-(x2-x3)*(y1-y3); if S=0 then writeln('3-я точка принадлежит прямой') else writeln('3-я точка не принадлежит прямой'); readln; end.
№ 3 | Автор: jester |
2012-11-07, 20:19 | Изменено: jester - Ср, 2012-11-07, 21:25
|
Репутация: [ + 3 ]
|
|
|
Quote (jester) program tochki; Не вникая пока в детали хочу спросить: "зачем 1/2 в S, если сравниваешь потом с нулем? "
|
|
|
ошибся...1/2 там не нужна
№ 5 | Автор: jester |
2012-11-07, 20:52 | Изменено: jester - Ср, 2012-11-07, 21:04
|
Репутация: [ + 3 ]
|
|
№ 5 | Автор: jester |
2012-11-07, 20:52 | Изменено: jester - Ср, 2012-11-07, 21:04
|
Репутация: [ + 3 ]
|
|
|
Quote (admin) program tochki; Принимается про 1/2. Продолжим опять не вникая в детали: а что будет если к примеру, окажется что x1=x3 и x2=x3?
|
|
|
тогда S будет равно 0 - 3-я точка пренадлежит прямой (прямая паралельна OY...походу)
|
|
|
program tochka_i_prama; uses crt; var x1,y1,x2,y2,x3,y3 : real; {кординати} a,b,c,d : real; {вектора} {======================================} procedure vopros; begin writeln('введите кординати первой точки прямой (x,y) через пробел'); readln(x1,y1); writeln('введите кординати второй точки прямой (x,y) через пробел'); readln(x2,y2); writeln('введите кординати третей точки (x,y) через пробел'); readln(x3,y3); a:=sqrt(sqr(y2-y1)); b:=sqrt(sqr(x2-x1)); c:=sqrt(sqr(y3-y2)); d:=sqrt(sqr(x3-x2)); end; {======================================} procedure perestrahovka; begin a:=a+1; b:=b+1; c:=c+1; d:=d+1; end; {======================================} procedure otvet; begin if (x1-x2+x3 = x1) and (y1-y2+y3 = y1) then writeln('3 кординати являются одной точкой') else if (x1= x3) and (y1=y3) then writeln('точка лежит на первой точке прямой СЛЕДОВАТЕЛЬНО пренадлежит прямой') else if (x2= x3) and (y2=y3) then writeln('точка лежит на второй точке прямой СЛЕДОВАТЕЛЬНО пренадлежит прямой') else if (x1= x2) and (y1=y2) then writeln('ОШИБКА ВВОДА : заданая прямая является точкой !') else if (x1-x2+x3 = x1) then writeln('точка принадлежит прямой (прямая паралельна ox)') else if (y1-y2+y3 = y1)then writeln('точка принадлежит прямой (прямая паралельна oy) ') else if (a/b = c/d) then writeln('точка принадлежит прямой') else writeln('точка не принадлежит прямой !'); end; {======================================} begin clrscr; vopros; if (a = 0) then perestrahovka else if (b = 0) then perestrahovka else if (c = 0) then perestrahovka else if (d = 0) then perestrahovka; otvet; readln; end.
ну тут все учтено !
№ 8 | Автор: babun9999 |
2012-11-08, 17:46 | Изменено: babun9999 - Чт, 2012-11-08, 18:56
--------->
|
|
|
Исправлена
program tochki; {Даны 2 точки, которые образуют прямую. Программа определяет принадлежность 3-ей точки прямой. Версия 1.2 13.11.12 г. jester} const e=0.00000000001; var x1,x2,x3,y1,y2,y3,S:real; begin writeln('Введите координаты 1-ой точки на плоскости через пробел'); readln(x1,y1); writeln('Введите координаты 2-ой точки на плоскости через пробел'); readln(x2,y2); writeln('Введите координаты 3-ей точки на плоскости через пробел'); readln(x3,y3); if (x1=x2)and(x1=x3)and(y1=y2)and(y1=y3) then writeln('Все координаты принадлежат единственной точке') else begin S:=(x2-x1)*(y3-y1)-(x3-x1)*(y2-y1); if abs(S)<e then writeln('3-я точка принадлежит прямой') else writeln('3-я точка не принадлежит прямой'); end; readln; end.
|
|
|
Сделай дополнительную проверку: Лежит ли третья точка в отрезке между первой и второй и будет хорошо))
Нужна помощь? Сюда: vkontakte.ru/berestovskiy
|
|
|
+
№ 11 | Автор: babun9999 |
2012-11-14, 10:42 | Изменено: babun9999 - Ср, 2012-11-14, 10:43
--------->
|
|
|
^_^
Нужна помощь? Сюда: vkontakte.ru/berestovskiy
|
|
|