Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/40: Рейтинг темы: голосов - 40, средняя оценка - 4.55
0 / 0 / 0
Регистрация: 24.08.2017
Сообщений: 2

Функция определяющая расстояние от точки до прямой

04.09.2017, 12:04. Показов 8971. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
в долгу не останусь
Создать функцию, позволяющую найти расстояние от P точки до прямой
AB. С помощью этой функции найти расстояния от точки P до прямых
AB, AC, BC, если даны координаты точек P, A, B, C.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
04.09.2017, 12:04
Ответы с готовыми решениями:

Показать,что ГМТ точки, расстояние которой от прямой Х=45 в 3 рза больше, чем расстояние от точки А(5,0)
показать,что ГМТточки ,расстояние которой от прямой Х=45 в 3 рза больше,чемрасстояние от точки А(5,0) до эллипса

Аналитическая геометрия: расстояние между точками, расстояние от точки до прямой и т.д
всем привет! есть несколько задачек, которые нужно реализовать на vb .net, буду рад если поможете собственно задачи (по аналитической...

Найти уравнение прямой, расстояние от точки до прямой.
1)Для всех точек А(9;-1), В(5,2) и М(4,4) найти уравнение прямой (АВ), расстояние от точки М до этой прямой и уравнение прямой, которая...

10
Заклинатель змей
 Аватар для DobroAlex
705 / 560 / 219
Регистрация: 30.04.2016
Сообщений: 2,605
04.09.2017, 13:03
tatyanatanya89,
Если прямая проходит через две точки P1=(x1,y1) и P2=(x2,y2), то расстояние от (x0,y0) до прямой равно:
Миниатюры
Функция определяющая расстояние от точки до прямой  
0
Заклинатель змей
 Аватар для DobroAlex
705 / 560 / 219
Регистрация: 30.04.2016
Сообщений: 2,605
04.09.2017, 13:16
tatyanatanya89, если я не путаю скобки, то как-то так :
C++
1
2
3
4
#include <cmath>
double distance(double x0, double y0, double x1, double y1, double x2, double  y2) {
   return abs((y2-y1)*x0-(x2-x1)*y0+x2*y1-y2*x1)/sqrt(pow(y2-y1, 2.0) + pow(x2-x1,2.0))
}
0
 Аватар для vlisp
1064 / 985 / 153
Регистрация: 10.08.2015
Сообщений: 5,375
04.09.2017, 13:38
Цитата Сообщение от DobroAlex Посмотреть сообщение
если я не путаю скобки, то как-то так
Это всего лишь частный случай, если объекты лежат в плоскости, а для пространства можешь?
0
Заклинатель змей
 Аватар для DobroAlex
705 / 560 / 219
Регистрация: 30.04.2016
Сообщений: 2,605
04.09.2017, 14:11
vlisp, ТС не упоминала размерность пространства
0
 Аватар для vlisp
1064 / 985 / 153
Регистрация: 10.08.2015
Сообщений: 5,375
05.09.2017, 07:27
Цитата Сообщение от DobroAlex Посмотреть сообщение
ТС не упоминала размерность пространства
В таком случае надо брать более общий вариант, и вообще это был мой вопрос, а не ТС...
0
677 / 479 / 216
Регистрация: 06.09.2013
Сообщений: 1,312
05.09.2017, 09:41
Лучший ответ Сообщение было отмечено zss как решение

Решение

В трехмерном случае расстояние от P до AB:
https://www.cyberforum.ru/cgi-bin/latex.cgi?d(P, AB) = {  { | [B - A, P - A]| } \over  { |B - A| }  }
где квадратные скобки операция векторного произведения.
То есть по хорошему как-то так надо:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#include <iostream>
#include <cmath>
 
using namespace std;
 
struct Vector3 {
    Vector3(double _x, double _y, double _z)
        :x(_x), y(_y), z(_z) {};
    double x, y, z;
};
 
Vector3 operator-(const Vector3 &op1, const Vector3 &op2) {
    return Vector3(op1.x - op2.x, op1.y - op2.y, op1.z - op2.z);
}
 
// Векторное произведение
Vector3 cross(const Vector3 &op1, const Vector3 &op2) {
    return Vector3(op1.y * op2.z - op1.z * op2.y,
                   op1.z * op2.x - op1.x * op2.z,
                   op1.x * op2.y - op1.y * op2.x);
}
 
//  Скалярное произведение
double dot(const Vector3 &op1, const Vector3 &op2) {
    return op1.x * op2.x + op1.y * op2.y + op1.z * op2.z;
}
 
// Расстояние от p до прямой ab
double distance_to_line(const Vector3 &a, const Vector3 &b, const Vector3 &p) {
    Vector3 ab = b - a;
    Vector3 ap = p - a;
    Vector3 ab_cross_ap = cross(ab, ap);
    return sqrt(dot(ab_cross_ap, ab_cross_ap) / dot(ab, ab));
 
}
 
int main()
{
    Vector3 a(1.0, 1.0, 0.0);
    Vector3 b(5.0, 4.0, 0.0);
    Vector3 p(-3.0, 8.0, 0.0);
    cout << "Distance: " << distance_to_line(a, b, p) << endl;
    return 0;
}
2
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
05.09.2017, 10:08
woldemas, Опять же, это только для трехмерного. Для бОльших размерностей, кажется, придется по честному найти гиперплоскость, перпендикулярную АВ и проходящую через т.Р, и искать ее пересечение с прямой АВ.

Добавлено через 6 минут
Гиперплоскость, однако, можно не строить. Можно записать уравнение прямой в параметрическом виде X = A(1-t) + Bt (Х, А, В - вектора) и условие: Скалярное произведение (АХ,РХ) = 0, получим 1 уравнение с неизвестным t... Квадратное, правда.. Но что-то там должно сократиться... Что намекает на существование более простого решения...

Добавлено через 2 минуты
Цитата Сообщение от Байт Посмотреть сообщение
что-то там должно сократиться...
Ну да, есть же всегда решение X = A, то есть t=0
0
1472 / 827 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
05.09.2017, 10:37
Подобие math.h для геометрии
0
Заклинатель змей
 Аватар для DobroAlex
705 / 560 / 219
Регистрация: 30.04.2016
Сообщений: 2,605
05.09.2017, 10:45
vlisp, до редактирования топика, там было написано "помогите решить школьную задачу", а я абсолютно уверен, что в школах нынче не проходят векторное произведение
0
677 / 479 / 216
Регистрация: 06.09.2013
Сообщений: 1,312
05.09.2017, 11:11
Байт, если продолжить ваши рассуждения, то для произвольной размерности получается что-то вроде: https://www.cyberforum.ru/cgi-bin/latex.cgi?\left |P - A  -    (B - A)\frac { <B - A, P - A> } { (B - A)^2 } \right|
<> - скалярное произведение
DobroAlex, да, можно одним скалярным обойтись.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
05.09.2017, 11:11
Помогаю со студенческими работами здесь

Функция определяющая пересечение окружности и прямой
Пожалуйста напишите код с комментариями а то я немного тупенькая . Нужно | разработать функцию, определяющую, пересекаются ли...

Найти расстояние от точки A до прямой, проходящей через точки
Найти расстояние от точки A(0,0,0,1,-1) до прямой, проходящей через точки В(1,0,-1,2,-2) и С(1,2,1,-2,3) и написать уравнение...

Расстояние от точки до прямой
Найти расстояние от точки P(7,9,7) до прямой { x-2z-2=0, { ...

Расстояние от точки до прямой
Найти расстояние от точки Р(4,1,6) до прямой { x-y-4z+12=0 { 2x+y-2z+3=0

расстояние от точки до прямой
Найти расстояние от точки С до прямой AB имеется некий треугольник со сторонами A(1;6), B(3;4), C(-3;3) _____________ Я нашел...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
[В процессе разработки] SDL3 для Web (WebAssembly): Сборка библиотек SDL3 и Box2D из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия SDL 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual. . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru