Принадлежит ли точка линии заданной уравнением

Принадлежит ли точка линии заданной уравнением

Вопрос по геометрии:

. Принадлежит ли точка Е (3; 7) линии, заданной уравнением х2 – 4х + у = 4?

Трудности с пониманием предмета? Готовишься к экзаменам, ОГЭ или ЕГЭ?

Воспользуйся формой подбора репетитора и занимайся онлайн. Пробный урок — бесплатно!

Ответы и объяснения 2

Поставь 3 и 7 вместо x и y соответственно:
3^2-4*3+7=4
9-12+7=4
4=4

Да, точка принадлежит

Просто подставляешь 3 в х и 7 в у
9-4*3+7=4
4=4
значит принадлжет

Знаете ответ? Поделитесь им!

Как написать хороший ответ?

Чтобы добавить хороший ответ необходимо:

  • Отвечать достоверно на те вопросы, на которые знаете правильный ответ;
  • Писать подробно, чтобы ответ был исчерпывающий и не побуждал на дополнительные вопросы к нему;
  • Писать без грамматических, орфографических и пунктуационных ошибок.

Этого делать не стоит:

  • Копировать ответы со сторонних ресурсов. Хорошо ценятся уникальные и личные объяснения;
  • Отвечать не по сути: «Подумай сам(а)», «Легкотня», «Не знаю» и так далее;
  • Использовать мат — это неуважительно по отношению к пользователям;
  • Писать в ВЕРХНЕМ РЕГИСТРЕ.
Есть сомнения?

Не нашли подходящего ответа на вопрос или ответ отсутствует? Воспользуйтесь поиском по сайту, чтобы найти все ответы на похожие вопросы в разделе Геометрия.

Трудности с домашними заданиями? Не стесняйтесь попросить о помощи — смело задавайте вопросы!

Геометрия — раздел математики, изучающий пространственные структуры и отношения, а также их обобщения.

Как я могу сказать, принадлежит ли точка определенной линии?

Как я могу сказать, принадлежит ли точка определенной линии?

примеры приветствуются, если это возможно.

11 ответов

в простейшей форме просто подключите координаты к линейному уравнению и проверьте равенство.

подключите X и Y:

так что да, точка на линии.

если ваши линии представлены в форме (X1,Y1),(X2,Y2), то вы можете рассчитать наклон с помощью:

а затем получите Y-пересечение с этим:

Edit: я исправил y-пересечение (которое было X1 / Y1 . )

вы должны проверить это x1 — x2 не 0 . Если это так, то проверка того, находится ли точка на линии, — это простой вопрос проверки того, равно ли значение Y в вашей точке x1 или x2 . Кроме того, проверьте, что X точки не является » x1 » или «x2».

Я только что написал функцию, которая обрабатывает несколько дополнительных требований, так как я использую эту проверку в приложении для рисования:

  • нечеткость-должно быть место для ошибки, так как функция используется для выбора строк, нажав на них.
  • линия получила конечную точку и начальную точку, никаких бесконечных линий.
  • должен обрабатывать прямые вертикальные и горизонтальные линии, (x2-x1) == 0 вызывает деление на ноль в других ответах.

лучший способ определить, лежит ли точка R = (rx, ry) на линии, соединяющей точки P = (px, py) и Q = (qx, qy), — проверить, является ли определитель матрицы

а именно (qx — px) * (ry — py) — (qy — py) * (rx-px) близко к 0. Это решение имеет несколько связанных преимуществ по сравнению с другими размещенными: во-первых, оно не требует специального случая для вертикальных линий, во-вторых, оно не делится (обычно медленная операция), в-третьих, оно не вызывает плохую плавающую точку поведение, когда линия почти, но не совсем вертикальный.

Я думаю, что г-н Патрик Макдональд поставил почти правильный ответ, и это исправление его ответа:

и, конечно, есть много других правильных ответов, особенно г-н Джош, но я нашел, что это лучший.

Спасибо за evryone.

даны две точки На линии L0 и L1 и выберите пункт Проверить P .

норма вектора n — это расстояние от точки P от линии до L0 и L1 . Если это расстояние равно нулю или достаточно мало (в случае ошибок округления), точка лежит на линии.

символ * обозначает скалярное произведение.

пример

это уравнение прямой. x & y-координаты. Каждая линия характеризуется наклоном (м ) и пересечением оси y (с).

таким образом, учитывая m & c для линии, вы можете определить, находится ли точка (x1, y1) на линии, проверив, выполняется ли уравнение для x = x1 и y = y1

если у вас есть строка, определенная ее конечными точками

и у вас есть точка, которую вы хотите проверить

тогда можно определить функцию следующим образом:

и назовите это следующим образом:

вам нужно будет проверить деление на ноль.

2D-линия обычно представлена с помощью уравнения в двух переменных x и y вот хорошо известное уравнение

теперь представьте, что ваша линия GDI+ нарисована от (0,0) до (100, 100), тогда значение m=(0-100)/(0-100) = 1 таким образом, уравнение для вашей линии y-0=1*(x-0) => y=x

теперь, когда у нас есть уравнение для рассматриваемой линии, его легко проверить, принадлежит ли точка этой линии. Данная точка (x3, y3) принадлежит этой строке, если она удовлетворяет линейное уравнение при замене x=x3 и y=y3. Например, точка (10, 10) принадлежит этой строке, так как 10=10, но (10,12) не принадлежит этой строке, так как 12 != 10.

примечание: для вертикальной линии значение наклона (m) бесконечно, но для этого частного случая вы можете использовать уравнение для вертикальной линии непосредственно x=c, где c = x1 = x2.

хотя я должен сказать, что не уверен, что это самый эффективный способ сделать это. Я постараюсь найти более эффективный когда у меня будет больше времени.

надеюсь, что это помогает.

таким образом, точка (a, b) находится на этой линии, если она удовлетворяет этому уравнению, т. е. b = ma + c

не могли бы вы быть более конкретным?

о каком языке программирования вы говорите?

о какой среде вы говорите?

о каких «строках» ты говоришь? Смс? Какой смысл? XY на экране?

в качестве альтернативы slope/y-intercept метод, я выбрал этот подход, используя Math.Atan2 :

первая проверка reference определяет арктан от начальной точки сегмента линии до его конечной точки. Затем с точки зрения начальной точки мы определяем арктан в вектор v .

если эти значения равны, мы проверяем с точки зрения конечной точки.

простой и ручки горизонтальные, вертикальные и все остальное между ними.

Принадлежность точки отрезку. Почему не работает классика?

IP76 > Векторная графика > Принадлежность точки отрезку. Почему не работает классика?

Определить принадлежность точки отрезку, казалось бы, вполне себе тривиальная задача из школьного курса геометрии. Однако, есть определенные нюансы, которые заставляют усомниться в верности классической формулы:

Причины и постановка задачи

Запросы «как найти принадлежность точки отрезку» уводят на страницу «Пересечение прямых, угол и координаты пересечения», где есть пункт «Принадлежность точки отрезку». В нем рассматривается факт принадлежности точки отрезку, уже после того, как мы определили точку пересечения прямых. То есть точка уже принадлежит прямым, и это абсолютно точно. Осталось только определиться, точка в отрезке между двумя точками отрезка, либо где-то на прямой мимо них.

Людям свойственно искать готовые решения, и код, представленный в статье вряд ли удовлетворит запросу «как найти принадлежность точки отрезку, заданный двумя точками«. Поэтому здесь задачу так и сформулируем:

Есть отрезок, заданный точками P1(x1,y1) и P2 (x2,y2) . Необходимо определить, принадлежит ли точка P(x,y) этому отрезку.

Классическое уравнение

Предположим, вы делаете векторный редактор. Необходимо по курсору мыши определить попадает ли точка в ранее нарисованный отрезок. В этом многотрудном деле такая задача возникает всегда.

Для совместимости с Delphi 7 введем тип вещественной точки:

Почему бы не сделать сразу TPointF вместо типа TxPoint? Просто у меня гора старых исходников, где используется этот тип, а никакого TPointF не было ни в помине, ни в планах. Delphi 7 казалась вершиной инженерной мысли на тот момент.

В предложение uses дописываем следующее (ради TPointF, и чтобы компилятор XE не доставал хинтами):

Почему именно XE5? Если честно, нет возможности проверить, не ставить же ради этого всю линейку дельфей. Но в XE5 вещественная точка точно есть, а в Delphi 7 ее точно нет. Вот этим и объясняется выбор версии компилятора в директиве. Одни говорят, что TPointF появился в XE2, другие — аж в Delphi 2010. Короче, с таким директивным условием будет работать везде и точка.

Пишем небольшую функцию, которая использует классическое уравнение прямой, проходящей через две различные точки на плоскости, представленное выше.

SameValue — сравнивает два вещественных числа с учетом погрешности Epsilon. Находится в модуле Math, который надо подключить в предложении uses секции implementation.

Что происходит. Вначале проверяется допустимость координаты точки внутри координат отрезка. Условие необходимое, но недостаточное. Если координата может принадлежать отрезку, третьим условием проверяем нахождение точки на прямой, проходящей через точки отрезка.

Рис.1. Курсор точно на линии, но не определяет, что точка принадлежит отрезку

Если мы попытаемся по координатам курсора мыши определить, попала ли точка в отрезок, нас ждет фиаско. Складывается ощущение, что формула не работает, алгебра — отстой, все в жизни не так.

Расширенная классика

Для начала навесим на функцию еще пару условий, чтобы определить попадание в точки, задающие отрезок.

Ну, во-первых, вот и разгадка, куда делись значения 1 и 2 из результатов предыдущей функции. Во-вторых, теперь в конечные точки отрезка попадает отлично, но между ними по-прежнему не хочет работать.

На самом деле — математика по-прежнему царица наук, а мы пытаемся повенчать розу белую с черной жабой.

Выведем в интерфейс значения dx = (p2.x-p1.x), dy = (p2.y-p1.y) и т.д. Плюс результат работы функции (p.x-p1.x)*(p2.y-p1.y) — (p.y-p1.y)*(p2.x-p1.x). И убедимся, что при самых казалось бы максимально возможных приближениях к отрезку, результат ошеломляет своей двух- или трехзначной непохожестью на ноль.

Рис.2. Теперь определяет конечные точки, но между ними по-прежнему работает так себе…

Конечно, используя операцию умножения вместо деления, мы избегаем деления на ноль, укорачиваем код. Но при этом надо помнить, что умножение даже 1 на 12, это уже далеко от нуля, а если появляется еще и минус в разницах, то от нуля мы улетаем очень быстро и очень ощутимо.

На рисунке 2 прицел точно на линии, но разность координат, которую получаем из классического уравнения, и которая должна быть равна нулю, между тем равна:

Функция применима в точных расчетах, но не в векторном редакторе.

Модификация уравнения

Очевидно, надо вычислять как-то иначе. Например вычислять Y по имеющейся координате X и сравнивать с имеющейся координатой Y. Если разница меньше заданного Epsilon — точка принадлежит отрезку. Выразим Y из используемого уравнения прямой. Итак, дано:

Выразим Y:

И напишем еще одну функцию, в которой учтем ситуацию, когда (X2-X1) может быть равно нулю. Это ситуация вертикальной (или почти вертикальной) прямой.

Epsilon уже выступает, и как точность вычислений, и как допуск, при котором мы считаем, что точка на отрезке. Невозможно скрупулезно попасть мышкой в нужную точку отрезка, которая сама по себе уже есть огромное приближение к действительности. Все мы помним и любим Брезенхэма.

Рис.3. Все здорово определяет с учетом погрешности Epsilon=12 pix

Но, даже если мы упростили себе процесс «попадания» в отрезок, мы должны знать точные координаты на отрезке. Для этого у нас и появился тип вещественной точки TxPoint и возвращаемый параметр res. В этой версии функции мы производим расчет реальной точки на отрезке.

На рисунке 3 расчетная точка и ее координаты выделена коричневым цветом.

Однако, все равно есть нюанс. Если линия сильно вертикальна, то есть расстояние (X2-X1) невелико, попадать в линию все равно трудно.

Рис.3.1. На почти вертикальной линии функция снова капризничает

Связано с тем, что при уменьшении делителя, коим разность по X выступает в нашем случае, сильно вырастает результат, и чем расстояние (X2-X1) меньше, тем труднее попасть в Epsilon.

Итоговая функция

В стремлении к совершенству, всегда что-то незамысловатое, в пару строк кода, разрастается в какую-то все учитывающую портянку листинга.

Давайте проверять, что больше (X2-X1) или (Y2-Y1), и в зависимости от результата, будем высчитывать либо Y, либо X. Формулу для X не привожу, он очевидна.

Почему такая большая функция получилась?

В функции помимо факта принадлежности точки отрезку, также осуществляется проверка на конечные точки — чтобы можно было менять их расположение мышкой. Также, функция возвращает «истинную» точку на отрезке, полученную из приближенной, содержащую погрешность Epsilon.

Можно сократить, не считать конечные точки, не анализировать «вертикальность» и «горизонтальность». Можно взять за настоящую ту точку, которую анализируем и не считать «истинную». Код в этом случае сильно сократиться. Поэтому лучше иметь полный комплект, из которого можно удалить «лишнее» на ваш взгляд.

Зачем нужны такие ощутимо большие проверки на вертикальность и горизонтальность. Ну, во-первых мы освобождаем от условий последний блок вычислений, во-вторых, если убрать, скажем, проверку на dy, погрешность станет в два раза меньше. Потому что отработает это условие: Abs(p1.Y-p.Y) + Abs(p2.Y-p.Y). Имея идеальную горизонтальную линию, подведя курсор на Epsilon допустимый интервал, мы получим в итоге Epsilon + Epsilon = 2 * Epsilon и условие конечно не сработает. Сработает, если подведем на расстояние в два раза меньшее Epsilon.

Если всех этих тонкостей не требуется, можно смело использовать либо эту, либо вообще эту функцию.

Классика всегда в моде или Математика — царица наук

Теперь давайте полученную в результате предыдущей функции вещественную точку res подставим в первую функцию. И убедимся, что теоретическая принадлежность точки отрезку работает прекрасно, просто в пространстве грубых целочисленных точек мы не в состоянии гарантированно получить такую точку, которая удовлетворила бы уравнению. Но если мы ее рассчитаем и получим значения с плавающей запятой — все заработает как надо.

Рис.5. Результат применения рассчитанной точки для первой функции

На рисунке 5 добавлен результат функции f(x,y)=(x-x1) * (y2-y1) — (y-y1) * (x2-x1) для рассчитанной точки на отрезке. Он равен, как и следовало ожидать, нулю. А также результат вызова первой функции, которая использует это уравнение и возвращает 3, если точка принадлежит отрезку. Что мы воочию и видим.

1)Поэтому в графике надо избегать типов TPoint, даже если это вызывает необходимость постоянно их округлять для функций GDI.

2)Поэтому функция правильная, классическая формула работает, просто в пространстве компьютерных упрощений надо использовать ту же самую формулу, но в другом качестве.

Скачать

Друзья, спасибо за внимание!

Надеюсь, материал был полезен.

Не пропустите новых интересных штуковин, подписывайтесь на телегу. )))

Если есть вопросы, с удовольствием отвечу.

Исходники и исполняемый файл для GDI и Delphi 7. Проверен в XE 7, XE 10.

Исходники (Delphi 7, XE7, XE10) 11 Кб

Исполняемый файл (zip) 213 Кб

Как подключить GDI+ в Delphi 7 и без проблем скомпилировать в XE 7, XE 10 читаем в этой статье. Там же забираем исходники.

Чтобы нарисовать отрезок, нажмите мышь и, не отпуская, ведите курсор. При отпускании отрезок зафиксируется. При повторном нажатии начнет рисоваться новый отрезок.

За концы отрезка можно таскать. Если попали на отрезок, т.е. видна коричневая точка, можно таскать весь отрезок.

Исходники намеренно выложены в D7 варианте.

При компиляции в XE10 следует снять галочку с Enable High-DPI


источники:

http://askdev.ru/q/kak-ya-mogu-skazat-prinadlezhit-li-tochka-opredelennoy-linii-174948/

http://ip76.ru/point-in-segment/