Даны три точки А(х1,y1), B(x2,y2) и C(x3,y3). Определить, будут ли они расположены на одной прямой. Если да, то указать координаты точки попавшей внутрь отрезка. Напишите программу в pascal, пожалуйста.

Даны три точки А(х1,y1), B(x2,y2) и C(x3,y3). Определить, будут ли они расположены на одной прямой. Если да, то указать координаты точки попавшей внутрь отрезка. Напишите программу в pascal, пожалуйста.
Гость
Ответ(ы) на вопрос:
Гость
Известно уравнение прямой, проходящей через две точки A(x₁,y₁) и B(x₂,y₂). Если третья точка C(x₃,y₃) лежит на этой же прямой, то после подстановки её координат уравнение обращается в тождество [latex]\displaystyle \frac{x-x_1}{x_2-x_1}= \frac{y-y_1}{y_2-y_1} \to \frac{x_3-x_1}{x_2-x_1} \equiv \frac{y_3-y_1}{y_2-y_1}[/latex] Следовательно, нужно проверить, выполняется ли это тождество для заданных координат. В этом тождестве есть одна неприятная вещь: если y₂=y₁ и/или x₂=x₁, то в знаменателе получается ноль, чему компьютер уж точно не обрадуется. Поэтому такой случай надо рассмотреть отдельно, исходя из геометрического смысла. Если же y₂≠y₁ и x₂≠x₁, можно привести тождество к более удобному виду: [latex]\displaystyle \frac{x_3-x_1}{x_2-x_1} \equiv \frac{y_3-y_1}{y_2-y_1} \to (x_3-x_1)(y_2-y_1)\equiv (y_3-y_1)(x_2-x_1); \\ p_1=(x_3-x_1)(y_2-y_1), \ p_2=(y_3-y_1)(x_2-x_1), \ p_1\equiv p_2[/latex] Поскольку координаты могут быть и не целыми, а такие нецелые ("вещественные") числа представляются в компьютере с ограниченной точностью, тождество может оказаться ложным по причине такой неточности. Для обхода такого случая будем полагать, что два значения равны друг-другу, если их разность по модулю не превышает некоторой малой величины, т.е.: [latex]|p_1-p_2|\leq \epsilon, \ \epsilon=10^{-8} [/latex] Вернемся к случаю y₂=y₁. В этом случае прямая параллельна оси Х, т.е. тогда условием принадлежности третьей точки данной прямой будет y₃=y₁ при любом х. То же можно сказать и про случай х₂=х₁, когда следует проверить, что х₃=х₁. Если все три точки лежат на одной прямой, то у средней из них значение любой из координат должно находиться между значениями двух одноименных координат крайних точек.  // PascalABC.NET 3.0, сборка 1160 от 05.02.2016 var   x1,y1,x2,y2,x3,y3,p1,p2:real;   on_line:boolean; begin   // Без проверки считаем, что у двух любых точек   // не может быть одинаковых координат   Write('Координаты точки А: '); Read(x1,y1);   Write('Координаты точки B: '); Read(x2,y2);   Write('Координаты точки C: '); Read(x3,y3);   if x3=x1 then on_line:=(x2=x1);   if (not on_line) then     if y3=y1 then on_line:=(y2=y1);   if not on_line then begin     p1:=(x3-x1)/(x2-x1); p2:=(y3-y1)/(y2-y1);     on_line:=(abs(p1-p2)<1e-8)     end;   if on_line then begin     Writeln('Точки лежат на одной прямой');     if (x2>x1) and (x2x3) and (x2x1) and (x3x2) and (x3
Не нашли ответ?
Ответить на вопрос
Похожие вопросы