Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
0 / 0 / 0
Регистрация: 23.12.2018
Сообщений: 14

Для каждой из точек определить расстояние до ближайшей стороны плота

24.12.2018, 12:21. Показов 1093. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
вводится массив точек на плоскости (кординаты x и y).Вводится кординаты прямоугольного плота (кординаты левого верхнего угла,длина и ширина).Для каждой из точек определить расстояние до ближаещей стороны плота (0,если точка находится на плоту)
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
24.12.2018, 12:21
Ответы с готовыми решениями:

Найти расстояние от заданной точки до ближайшей стороны треугольника
Здравствуйте! Возникла проблема, совершенно не понимаю, как выполнить задание, кому не сложно помогите. Заранее огромное спасибо. C# ...

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

Найти расстояние от точки до ближайшей стороны треугольника
Даны координаты вершин треугольника и координаты некоторой точки М внутри него. Испрользуя процедуру ( или функцию) подсчета расстояния от...

4
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16115 / 11236 / 2887
Регистрация: 21.04.2018
Сообщений: 33,037
Записей в блоге: 2
24.12.2018, 13:15
Цитата Сообщение от эмиль1998 Посмотреть сообщение
Для каждой из точек определить расстояние до ближаещей стороны плота (0,если точка находится на плоту)
Это даже алгоритмически описать непросто.
Можете дать математический алгоритм?
Запрограммировать его это уже следующий шаг.
0
0 / 0 / 0
Регистрация: 23.12.2018
Сообщений: 14
24.12.2018, 13:17  [ТС]
ну напишите решение
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16115 / 11236 / 2887
Регистрация: 21.04.2018
Сообщений: 33,037
Записей в блоге: 2
24.12.2018, 14:42
Цитата Сообщение от эмиль1998 Посмотреть сообщение
ну напишите решение
Писать программу времени сейчас нет.
Алгоритм вижу примерно так:
  • Метод DistanceLine - возвращающий расстояние от точки до прямой заданной двумя точками
  • Метод DistancePoint - возвращающий расстояние от точки до точки
  • Метод NormalLine - возвращающий пересечение перпендикуляра от точки на прямую заданной двумя точками
  • Metod IsUseSegment - определяющий принадлежит ли точка прямой заданному двумя точками отрезку.
  • Методом NormalLine для точки определяем проекции точки на 4 прямые проходящие через стороны плота.
  • Методом IsUseSegment определяем принадлежит ли хоть одна из проекций стороне плота
  • Если принадлежит, то для принадлежащих проекций считаем методом DistanceLine расстояние и выбираем из них наименьшее
  • Если не принадлежит, то считаем методом DistancePoint расстояние от точки до углов плота и выбираем из них наименьшее
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16115 / 11236 / 2887
Регистрация: 21.04.2018
Сообщений: 33,037
Записей в блоге: 2
25.12.2018, 11:23
эмиль1998, перечитал ТЗ. Оказывается не обратил внимание на то что стороны плота параллельны осям координат.
Тогда всё упрощается.
Три класса Точка, Размер и Плот
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
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
        public class Point
        {
            public double X { get; }
            public double Y { get; }
            public Point() { }
            public Point(double X, double Y) { this.X = X; this.Y = Y; }
            public static Point Parse(string value)
            {
                string[] strArr = value.Split("\r\n ".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
                return new Point(double.Parse(strArr[0]), double.Parse(strArr[1]));
            }
            public static bool TryParse(string value, out Point point)
            {
                string[] strArr; 
                if (!string.IsNullOrWhiteSpace(value) 
                    && (strArr = value.Split("\r\n ".ToCharArray(), StringSplitOptions.RemoveEmptyEntries)).Length > 1 
                    && double.TryParse(strArr[0], out double _x) 
                    && double.TryParse(strArr[1], out double _y)
                    )
                {
                    point = new Point(_x, _y);
                    return true;
                }
                point = null;
                return false;
            }
        }
        public class Size
        {
            public double Width { get; }
            public double Height { get; }
            public Size() { }
            public Size(double Width, double Height) { this.Width = Width; this.Height = Height; }
            public static Size Parse(string value)
            {
                string[] strArr = value.Split("\r\n ".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
                return new Size(double.Parse(strArr[0]), double.Parse(strArr[1]));
            }
            public static bool TryParse(string value, out Size point)
            {
                string[] strArr;
                if (!string.IsNullOrWhiteSpace(value)
                    && (strArr = value.Split("\r\n ".ToCharArray(), StringSplitOptions.RemoveEmptyEntries)).Length > 1
                    && double.TryParse(strArr[0], out double _x)
                    && double.TryParse(strArr[1], out double _y)
                    )
                {
                    point = new Size(_x, _y);
                    return true;
                }
                point = null;
                return false;
            }
        }
        public class Raft
        {
            private readonly double _xMin;
            private readonly double _xMax;
            private readonly double _yMin;
            private readonly double _yMax;
            private readonly double _width;
            private readonly double _height;
            private readonly Point _leftTop;
            private readonly Point _leftBottom;
            private readonly Point _rightTop;
            private readonly Point _rightBottom;
            public Point Location => _leftTop;
            public Size Size { get; }
            public Raft() { }
            public Raft(Point Location, Size Size)
            {
                if (Size.Width > 0)
                {
                    _xMin = Location.X;
                    _xMax = Location.X + Size.Width;
                    _width = Size.Width;
                }
                else
                {
                    _xMax = Location.X;
                    _xMin = Location.X + Size.Width;
                    _width = -Size.Width;
                }
                if (Size.Height > 0)
                {
                    _yMin = Location.Y;
                    _yMax = Location.Y + Size.Height;
                    _height = Size.Height;
                }
                else
                {
                    _yMax = Location.Y;
                    _yMin = Location.Y + Size.Height;
                    _height = -Size.Height;
                }
                _leftTop = new Point(_xMin, _yMin);
                _leftBottom = new Point(_xMin, _yMax);
                _rightTop = new Point(_xMax, _yMin);
                _rightBottom = new Point(_xMax, _yMax);
                this.Size = new Size(_width, _height);
            }
            public static double DistancePoints(Point A, Point B)
            {
                double _x = A.X - B.X;
                double _y = A.Y - B.Y;
                return Math.Sqrt(_x * _x + _y * _y);
            }
            public double DistancePoint(Point point)
            {
                if (point.X < _xMin)
                {
                    if (point.Y < _yMin) return DistancePoints(_leftTop, point);
                    if (point.Y > _yMax) return DistancePoints(_leftBottom, point);
                    return _xMin - point.X;
                }
                if (point.X > _xMax)
                {
                    if (point.Y < _yMin) return DistancePoints(_rightTop, point);
                    if (point.Y > _yMax) return DistancePoints(_rightBottom, point);
                    return point.X - _xMax;
                }
                if (point.Y < _yMin) return _yMin - point.Y;
                if (point.Y > _yMax) return point.Y - _yMax;
                return 0;
            }
 
        }
Пример их использования
C#
1
2
3
4
5
    Raft raft = new Raft(Point.Parse("2 3"), Size.Parse("4 5"));
    Console.WriteLine($"Плот. Координаты: {raft.Location.X}, {raft.Location.Y}. Размеры: {raft.Size.Width}, {raft.Size.Height}. ");
    Point[] points = "1 1 / 1 3 / 1 9/ 4 1 / 4 3 / 4 9/ 8 1 / 8 3 / 8 9".Split('/').Select(str => Point.Parse(str)).ToArray();
    (Point point, double distance)[] tuples = points.Select(pnt => (point: pnt, distance: raft.DistancePoint(pnt))).ToArray();
    Console.WriteLine(string.Join("\r\n", tuples.Select(tpl => $"Точка {tpl.point.X}, {tpl.point.Y}. Расстояние {tpl.distance}")));
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
25.12.2018, 11:23
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru