Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.58/124: Рейтинг темы: голосов - 124, средняя оценка - 4.58
0 / 0 / 0
Регистрация: 05.07.2019
Сообщений: 14

Как найти расстояние от точки до отрезка?

05.08.2020, 12:32. Показов 24946. Ответов 24
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
#include <vector>
#include <algorithm>
#include <cmath>
 
using namespace std;
 
int main() {
    double x = 0, y = 0, x1 = 0, y1 = 0, x2 = 0, y2 = 0;
    cin >> x >> y >> x1 >> y1 >> x2 >> y2;
    if (x * x2 + y * y2 < 0) {
        cout << sqrt((x - x1) * (x - x1) + (y - y1) * (y - y1));
    }
    else if (x * x1 + y * y1 < 0) {
        cout << sqrt((x - x2) * (x - x2) + (y - y2) * (y - y2));
    }
    else {
        double h = abs(((x2 - x1) * (y - y1) - (y2 - y1) * (x - x1)) / sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1)));
        cout << h;
    }
    return 0;
}
Проблема в этом коде - нахождение скалярного произведения, но как ее решить?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
05.08.2020, 12:32
Ответы с готовыми решениями:

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

Вычислить расстояние от точки на плоскости до ближайшей точки отрезка
Помогите ) составить программу, что рассчитывает расстояние от точки (x; y) на плоскости до ближайшей точки отрезка на оси Ox.

Расстояние от точки до отрезка
Подскажите в задаче! По какой формуле будет находиться расстояние d от точки М(x,y) до отрезка АВ, если скалярное произведение AM и...

24
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13210 / 6843 / 1824
Регистрация: 18.10.2014
Сообщений: 17,312
07.02.2022, 01:03
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от CENTRAL_SQUAD Посмотреть сообщение
C++
1
2
3
4
    BA_y = Ay - By; 
    AB_x = Bx - Ax; 
    prost = Ax * By - Bx * Ay; 
    dlina1 = abs((BA_y * Tx + AB_x * Ty + prost) / sqrt(BA_y * BA_y + AB_x * AB_x));
Это - реализация метода 2 из моего сообщения #9 выше.

Однако, как мне кажется, проще было бы распознать выход за концы отрезка так, как указано там, а не через опосредованную проверку на тупой угол. Хотя, по свежему размышлению, это - тоже хороший способ. Надо только быть осторожным с особыми случаями совпадения точек. И не ясно, зачем было вычислять заранее dlina1, dlina2 и dlina3, в то время как этот способ позволяет однозначно определить, за какой конец отрезка мы вылетели, т.е. вычислить сразу только одну - нужную - длину.

Цитата Сообщение от CENTRAL_SQUAD Посмотреть сообщение
abs(sqrt(...))
???
0
4 / 4 / 0
Регистрация: 06.02.2022
Сообщений: 20
10.02.2022, 20:53
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
???
Нужно взять модуль, спасибо за размышления по коду, благодаря вам его модернизировал))
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13210 / 6843 / 1824
Регистрация: 18.10.2014
Сообщений: 17,312
10.02.2022, 21:07
Цитата Сообщение от CENTRAL_SQUAD Посмотреть сообщение
Нужно взять модуль
Зачем? Результат sqrt не может быть отрицательным.
0
4 / 4 / 0
Регистрация: 06.02.2022
Сообщений: 20
11.02.2022, 00:24
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Зачем? Результат sqrt не может быть отрицательным.
Действительно, не обратил внимания...

Добавлено через 1 минуту
Цитата Сообщение от Hochmuch Посмотреть сообщение
Проблема в этом коде - нахождение скалярного произведения, но как ее решить?
Посмотри мой код)) Не зря же я его выкладывал...
0
677 / 479 / 216
Регистрация: 06.09.2013
Сообщений: 1,312
11.02.2022, 17:43
C++
1
2
3
4
5
6
7
8
9
void closest_point(double x1, double y1,
                double x2, double y2,
                double& x, double& y) {
     double t =  ((x - x1) * (x2 - x1) + (y - y1) * (y2 - y1)) 
            / ((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1));
     t = std::min(1.0, std::max(0.0, t)); 
     x = x1 + t * (x2 - x1);
     y = y1 + t * (y2 - y1);
}
А потом расстояние между точками
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
11.02.2022, 17:43

Расстояние от точки до отрезка
Дан отрезок в пространстве (x1,y1,z1) - (x2,y2,z2) и точка (x,y,z). Найдите расстояние от точки до отрезка. Формат входных данных: ...

Расстояние от точки до отрезка
Помогите пожалуйста решить Входные данные Шесть чисел – координаты точки и координаты концов отрезка. Выходные данные Одно...

Метод возвращает неправильно расстояние от отрезка до точки
В частности при A(-30;0), B(30;0), K(60;30) правильный ответ 42,4264068711929. Я вычисляю, с расчерчивание в тетради и получается 30....

построить проекцию отрезка, определяющего расстояние от точки до приямой.
Помогите пожалуйста с задачами по &quot;Начертательной геометрии&quot;

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


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

Или воспользуйтесь поиском по форуму:
25
Ответ Создать тему
Новые блоги и статьи
Из невошедшего на форум (диалог с ИИ-гугла)
zorxor 29.07.2026
А вот, что интересно, сказал мне ИИ-гугла: Этот текст — эмоциональный пост пользователя под ником zorxor на интернет-форуме (вероятно, посвященном мистике, непознанному или альтернативной науке). . . .
Был праздник вчера, а я и не знал.
kumehtar 28.07.2026
27. 07. 2026г. Intel Core 2 Duo исполнилось 20 лет Новости компьютерного мира и их обсуждение (4) Салют, шампанское, овации! :drink:
Нейтральные знания, чистый код - бла-бла-бла-бла, на самом деле кликбейт и самореклама, плагиат, и вот почему
Hrethgir 27.07.2026
То-есть отклонение такой публикации говорит само за себя, и пусть только возьмут на вооружение после отклонения публикации - это будет чистейшим актом плагиата. Отклонял Хабр. Дословно, отклонённая. . .
тв 16 бой ии
anaschu 27.07.2026
Великий Перелом ИИ: Как уравнения ОДУ Radau дожали цензурные фильтры Алисы Фиксируем в мемофонде Теории Всего беспрецедентный факт в истории ИИ-зондирования. В затяжном многораундовом. . .
мв 15. непроверенное, возможно, глюк
anaschu 27.07.2026
НАУЧНО-АНАЛИТИЧЕСКИЙ ОТЧЕТ. РАЗДЕЛ 1. 1: «НАУКА» (РАСШИРЕННАЯ СТЕХИОМЕТРИЧЕСКАЯ И ГЕНЕТИЧЕСКАЯ ВЕРСИЯ)Тема: Теоретическое обоснование инвариантности 19-мерного тензорного ядра непрерывных ОДУ и. . .
Очистка реквизитов и табличных частей документа при копировании (вариант 2)
Maks 26.07.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРаботу", разработанного в КА2. Задача: Заменить алгоритм запрета копирования документов для сотрудников с ролью "Стажер",. . .
Доктрина интенционального знания - Доктрина для портала "Срез".
Hrethgir 25.07.2026
Может найдётся кто захочет оценить доктрину. . . Написания правил участия для меня роскошь, требующая лимита времени, поэтому все сообщения не прошедшие модерацию будут видны только участникам портала,. . .
сукцессия 44. Решил подать на припринт в межународные сервисы препринтов. Но нужно одобрение от ученых
anaschu 25.07.2026
Английский вариант. Пока кто то не одобрит мою личность, мне не получиться это опубликовать на препринте. Но заявку на публикацию статьи я сегодня подам.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru