0 / 0 / 0
Регистрация: 28.10.2017
Сообщений: 2

Найти расстояние точки до ближайшей стороны треугольника

28.10.2017, 18:54. Показов 5383. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет!
Помогите решить данную задачу.

Заданы координаты вершин треугольника и координаты точки в нем. Найти расстояние этой точки до ближайшей середины стороны треугольника. (При решении задачи взять не менее 3-х вариантов координат вершин треугольника и точки в нем).

Пытался сам написать код, но еще не сильно знаком с C++. Решился обратиться на форум, может кто-то знает код этой задачи или найдет решение?

Добавлено через 9 минут
И если можно, то объясните пожалуйста. Буду благодарен.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
28.10.2017, 18:54
Ответы с готовыми решениями:

Найти расстояние от данной точки до ближайшей стороны треугольника
Даны координаты вершин треугольника и координаты некоторой точки внутри него. Найти расстояние от данной точки до ближайшей стороны...

Найти расстояние от данной точки внутри до ближайшей стороны треугольника
Добрый день!) нужна помощь в решении одной задачи:)Заранее спасибо:) Даны координаты вершин треугольника и координаты некоторой точки...

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

3
 Аватар для Herji
299 / 208 / 174
Регистрация: 11.05.2016
Сообщений: 655
28.10.2017, 22:06
Держите мои каракули:
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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
#include <iostream>
 
struct dot{double x; double y;
        dot(){};
        dot(double _x, double _y)
            : x(_x), y(_y) {} };
 
class MyTriangle {
 
public:
    dot A, B, C;
    
 
    MyTriangle(){};
    MyTriangle(double ax, double ay, double bx, double by, double cx, double cy) : 
    A(ax,ay), B(bx,by), C(cx,cy) 
    {
        SetMiddles();
    };
 
    double MinDistance(dot _myDot)
    {
        double temp_a = GetDistance(_myDot, mid[0]);
        
        for(int i=1; i<3; i++)
        {
            double temp_b = GetDistance(_myDot, mid[i]);
            if(temp_b < temp_a) temp_a = temp_b;
        }
        
        return temp_a;
    }
 
    void PrintResult(dot _myDot)
    {
        std::cout << "Min distance = " << MinDistance(_myDot) << "\n\n";
    }
 
    void SetMiddles()
    {
        mid[0] = FindMiddle(A,B);
        mid[1] = FindMiddle(B,C);
        mid[2] = FindMiddle(C,A);
    }
 
private:
 
    dot mid[3];
 
    dot FindMiddle(dot _a, dot _b)
    {
        dot temp((_a.x-_b.x)/2+_b.x, (_a.y-_b.y)/2+_b.y);
        return(temp);
    }
 
    double GetDistance(dot _myDot, dot _mid)
    {
        return ( sqrt( (_myDot.x - _mid.x)*(_myDot.x - _mid.x) + (_myDot.y - _mid.y)*(_myDot.y - _mid.y)  ));
    }
 
};
 
int main(void)
{
   MyTriangle first_tr(1,10,1,-10,44,1024);
   MyTriangle second_tr(0,0,100,100,0,100);
   MyTriangle third_tr(1,1024,-96.1,1028,17,2048.9);
 
   dot myDot;
   std::cout << "Input dot x, y ";
   std::cin >> myDot.x >> myDot.y;
 
   first_tr.PrintResult(myDot);
   second_tr.PrintResult(myDot);
   third_tr.PrintResult(myDot);
 
   system("pause");
   return (0);
}
0
27 / 27 / 16
Регистрация: 22.08.2017
Сообщений: 126
28.10.2017, 22:09
Вот что получилось:

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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
// Example program
#include <iostream>
#include <stdlib.h>
#include <math.h>
 
using namespace std;
 
typedef float my_type_data;
typedef unsigned int my_type_count;
 
const my_type_count num_vert=3;
 
my_type_data line_length(my_type_data x1,my_type_data x2,my_type_data y1,my_type_data y2){
my_type_data l1=pow(x2-x1,2);
my_type_data l2=pow(y2-y1,2);
return sqrt(l1+l2);
}
 
class my_point{
public:
my_type_data x;
my_type_data y;
 
my_point():x(0),y(0){}
my_point(my_point& p):x(p.x),y(p.y){}
my_point(my_type_data x1,my_type_data y1):x(x1),y(y1){}
 
};
 
class my_triangle{
public:
my_point point_array[num_vert];
 
my_triangle(){}
my_triangle(my_point& p1,my_point& p2,my_point& p3){
point_array[0]=p1;
point_array[1]=p2;
point_array[2]=p3;
}
 
};
 
void my_fun(my_triangle& t,my_point& p){
 
my_point middle[num_vert];
my_type_data l[num_vert];
my_type_data l_min;
 
middle[0].x=(t.point_array[0].x+t.point_array[1].x)/2;
middle[1].x=(t.point_array[1].x+t.point_array[2].x)/2;
middle[2].x=(t.point_array[0].x+t.point_array[2].x)/2;
 
middle[0].y=(t.point_array[0].y+t.point_array[1].y)/2;
middle[1].y=(t.point_array[1].y+t.point_array[2].y)/2;
middle[2].y=(t.point_array[0].y+t.point_array[2].y)/2;
 
my_type_count i;
for(i=0;i!=num_vert;++i){
 
l[i]=line_length(p.x,middle[i].x,p.y,middle[i].y);
 
if(i==0) l_min=l[i];
if(l[i]<l_min) l_min=l[i];
 
}//for
 
cout<<endl<<endl<<"l1="<<l[0]<<" l2="<<l[1]<<" l3="<<l[2]<<" l_min="<<l_min;
 
return;
}
 
int main(){
    
my_point point0(0,0);
my_point point1(0.5,0);
my_point point2(1,0);
 
my_point p1(0,0);
my_point p2(1,0);
my_point p3(0,1);
my_triangle t1(p1,p2,p3);
 
my_point p10(0,0);
my_point p20(1,0);
my_point p30(0,1);
my_triangle t10(p10,p20,p30);
 
my_point p100(0,0);
my_point p200(1,0);
my_point p300(0,1);
my_triangle t100(p100,p200,p300);
 
my_fun(t1,point0);
my_fun(t10,point1);
my_fun(t100,point2);
    
return 0;
}
Пример вывода:

l1=0.5 l2=0.707107 l3=0.5 l_min=0.5

l1=0 l2=0.5 l3=0.707107 l_min=0

l1=0.5 l2=0.707107 l3=1.11803 l_min=0.5

Здесь заданы три точки point0, point1 и point2 и три треугольника t1, t10 и t100.
В примере все три треугольника одинаковые.
Это сделано для того, чтобы проще было проверять результат.
Чтобы сделать их разными, надо задать другие координаты.

Здесь l1, l2, l3 расстояния от точки до до середин сторон треугольника.
Здесь l_min минимальное расстояние от точки до до середин сторон треугольника, то есть как раз "расстояние этой точки до ближайшей середины стороны треугольника".

Функция line_length вычисляет длину отрезка по его координатам.
Функция my_fun расстояния от точки до до середин сторон треугольника находит l_min и печатает результат.

Класс my_point определяет точку.
Класс my_triangle определяет треугольник.

Проверялось на http://cpp.sh/
0
0 / 0 / 0
Регистрация: 28.10.2017
Сообщений: 2
28.10.2017, 22:27  [ТС]
Ух ты!! Ребята,спасибо большое за такую проделанную работу!!!
Теперь буду сидеть и разбираться в коде.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
28.10.2017, 22:27
Помогаю со студенческими работами здесь

Зная площадь прямоугольного треугольника и угол при основании, найти все стороны треугольника
Требования к программе: - Входные данные ввести с помощью стандартных процедур ввода; - На печать вывести значение входной переменной и...

Найти расстояние от начала координат до каждой точки и расстояние между точками
задача на С++ На плоскости заданы точки своими координатами. Найти расстояние от начала координат до каждой точки и расстояние между...

Найти в текстовом файле координаты ближайшей точки
В текстовом файле содержится 2 колонки вещественных чисел(координаты x и y, соответственно). Написать программу, с помощью которой можно...

По длинам двух сторон некоторого треугольника и углу между ними найти длину третьей стороны и площадь этого треугольника
Привет всем. Помогите исправить программу. Вот задача: По длинам двух сторон некоторого треугольника и углу между ними найти длину...

Найти стороны треугольника
2) В равнобедренном прямоугольном треугольнике известна высота, опущенная на гипотенузу. Найти стороны треугольника.


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

Новые блоги и статьи
Новая зверюга
volvo 07.11.2025
Подарок на Хеллоуин, и теперь у нас кроме Tuxedo Cat есть еще и щенок далматинца: Хочу еще Симбу взять, очень нравится. . .
Инференс ML моделей в Java: TensorFlow, DL4J и DJL
Javaican 05.11.2025
Python захватил мир машинного обучения - это факт. Но когда дело доходит до продакшена, ситуация не так однозначна. Помню проект в крупном банке три года назад: команда data science натренировала. . .
Mapped types (отображённые типы) в TypeScript
Reangularity 03.11.2025
Mapped types работают как конвейер - берут существующую структуру и производят новую по заданным правилам. Меняют модификаторы свойств, трансформируют значения, фильтруют ключи. Один раз описал. . .
Адаптивная случайность в Unity: динамические вероятности для улучшения игрового дизайна
GameUnited 02.11.2025
Мой знакомый геймдизайнер потерял двадцать процентов активной аудитории за неделю. А виновником оказался обычный генератор псевдослучайных чисел. Казалось бы - добавил в карточную игру случайное. . .
Протоколы в Python
py-thonny 31.10.2025
Традиционная утиная типизация работает просто: попробовал вызвать метод, получилось - отлично, не получилось - упал с ошибкой в рантайме. Протоколы добавляют сюда проверку на этапе статического. . .
C++26: Read-copy-update (RCU)
bytestream 30.10.2025
Прошло почти двадцать лет с тех пор, как производители процессоров отказались от гонки мегагерц и перешли на многоядерность. И знаете что? Мы до сих пор спотыкаемся о те же грабли. Каждый раз, когда. . .
Изображения webp на старых x32 ОС Windows XP и Windows 7
Argus19 30.10.2025
Изображения webp на старых x32 ОС Windows XP и Windows 7 Чтобы решить задачу, использовал интернет: поисковики Google и Yandex, а также подсказки Deep Seek. Как оказалось, чтобы создать. . .
Passkey в ASP.NET Core identity
stackOverflow 29.10.2025
Пароли мертвы. Нет, серьезно - я повторяю это уже лет пять, но теперь впервые за это время чувствую, что это не просто красивые слова. В . NET 10 команда Microsoft внедрила поддержку Passkey прямо в. . .
Последние результаты исследования от команды MCM (октябрь 2025 г.)
Programma_Boinc 29.10.2025
Последние результаты исследования от команды MCM (октябрь 2025 г. ) Поскольку мы продолжаем изучать гены, которые играют ведущую роль в развитии рака, в рамках проекта "Картирование раковых. . .
Мысли в слух
kumehtar 29.10.2025
Обнаружил, что мысли лучше писать короткими фразами. Таким образом внимание читателя успевает охватить всю фразу сразу, за один раз, не соскакивая и не прерываясь. А если писать это длинным текстом,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru