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

Задача на построение прямой

25.01.2021, 17:57. Показов 1081. Ответов 7

Author24 — интернет-сервис помощи студентам
Даётся чётное количество точек, не превышающее 100, затем координаты этих точек. Нужно определить, через какие две точки провести прямую, чтобы количество точек по обе стороны от прямой было одинаковое и вывести координаты этих точек(через которые нужно провести прямую).

Заранее спасибо.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
25.01.2021, 17:57
Ответы с готовыми решениями:

Построение прямой по точкам
В "Edit" вводит координаты Y, а программа должна построить прямые по точкам. Х меняется как 1,2,3,...n. Например, вводим "2, 23,...

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

Построение прямой
Здравствуйте, подскажите, желательно примером, как построить прямую под углом в 31 градус, относительно оси Х.

7
732 / 693 / 110
Регистрация: 29.05.2015
Сообщений: 4,184
25.01.2021, 19:17
Задача слишком сложна. Вряд-ли кто-то будет решать. За спасибо.
1
1 / 1 / 0
Регистрация: 12.10.2020
Сообщений: 14
25.01.2021, 20:25  [ТС]
9 класс физмат лицей)
0
732 / 693 / 110
Регистрация: 29.05.2015
Сообщений: 4,184
25.01.2021, 20:38
Ну для лицея физмата то такая задачка не должна представлять трудностей. Как я думаю.
1
 Аватар для SmallEvil
3820 / 2741 / 770
Регистрация: 29.06.2020
Сообщений: 10,084
25.01.2021, 21:14
я профан в математике. но кажется тут надо несколько довольно простых геом, функций над точками и пару циклов

1) определить прямую, - набор из двух точек с разными координатами - готово
2) определить по отношению к прямой (двум точками) две полуплоскости
3) написать функцию для определения точки к одной из двух плоскостей, если не в первой, и не на прямой, то во второй.

и так либо до достижения условия, либо до полного перебора,

профит, не ?

Декартовы координаты

Координаты точек полуплоскости удовлетворяют неравенству:

Ах + By + С > 0, где А, В, С — некоторые постоянные, причём А и В одновременно не равны нулю.

Если сама прямая Ax + By + С = 0 (граница полуплоскости) причисляется к этой полуплоскости, то такую полуплоскость называют замкнутой.
ну это для меня ничего это не говорит )

Добавлено через 2 минуты
хотя зная немного про математику и геометрию, должен быть более эффективный способ, но как вариант.
1
732 / 693 / 110
Регистрация: 29.05.2015
Сообщений: 4,184
25.01.2021, 22:27
Проблема будет определить принадлежность точки полуплоскости. Есть метод определить принадлежность точки треугольнику. С 4-х угольником уже сложнее, но можно разделить его на 2 треугольника и проверять с каждым по отдельности. В итоге полуплоскость окажется ограниченной (хоть краями монитора), и будет либо треугольником, либо 4-х угольником.

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

Ну и уточнить - что делать, если на прямую между двумя точками попадает третья - отбраковывать? Тогда может получиться, что из ста точек ни одна прямая не соответствует условиям задачи.
1
 Аватар для zayats80888
6343 / 3514 / 1427
Регистрация: 07.02.2019
Сообщений: 8,979
25.01.2021, 22:32
RealKroko, наброски, брутфорс(полный перебор), ввод-вывод самостоятельно
Кликните здесь для просмотра всего текста
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
#include <iostream>
#include <utility>
#include <vector>
#include <cmath>
 
constexpr double eps = 1e-8;
 
struct vec2 { double x, y; };
 
double cross(const vec2 & lh, const vec2 & rh)
{ return lh.x * rh.y - rh.x * lh.y; }
 
vec2 operator-(const vec2 & lh, const vec2 & rh)
{ return { lh.x - rh.x, lh.y - rh.y }; }
 
int signImpl(double val)
{ return val < 0.0 ? -1 : 1; }
 
int sign(double val)
{ return std::abs(val) < eps ? 0 : signImpl(val); }
 
template <class It>
std::pair<It, It> findLine(It first, It last)
{
    for(auto prev = first; prev != last; ++prev)
    {
        for(auto next = std::next(prev); next != last; ++next)
        {
            int counter{};
            auto const a = *next - *prev;
            for (auto curr = first; curr != last; ++curr)
            {
                if (curr != prev && curr != next)
                {
                    auto const b = *curr - *prev;
                    counter += sign(cross(a, b));
                }
            }
            if (counter == 0)
                return {prev, next};
        }
    }
    return {last, last};
}
 
std::vector<vec2> readPoints()
{
    std::vector<vec2> result;
    // TO DO : сам
    return result;
}
 
int main()
{
    auto points = readPoints();
    auto result = findLine(points.begin(), points.end());
    if (result.first != points.end() && result.second != points.end())
    {
        // распечатать результат (result.first->x и т.д.)
    }
    else
    {
        // Точек не найдено
    }
}
1
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12873 / 6737 / 1810
Регистрация: 18.10.2014
Сообщений: 17,057
25.01.2021, 22:37
Общая идея алгоритма такова:

1. Берем произвольную прямую и проецируем на нее все точки. Предполагаем, что проекции всех точек уникальны (иначе наша исходная прямая недостаточно "произвольна")

2. Делим проекции на две равные части и поводим перпендикуляр, который разделит наше множество точек на две равные группы

3. Мысленно поворачиваем этот перпендикуляр пока он не упрется в две точки - одна и из одной группы, другая - из другой.

Разумеется, тут могут быть тонкости из-за коллинеарных точек
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
25.01.2021, 22:37
Помогаю со студенческими работами здесь

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

Построение числовой прямой
Подскажите как правильно построить числовую прямую, а конкретно как управлять параметрами засечек (координаты, количество, интервал).

Maxima построение прямой
Подскажите, пожалуйста, как построить прямую,заданную точкой и вектором нормали {p0;N} в программе maxima?

Построение перпендикуляра к прямой
Здравствуйте, уважаемые! Как нарисовать перпендикуляр к прямой в точках P1 и Р2(это концы прямой). Это мне нужно для отображения...

Построение перпендикуляра к прямой
Доброго времени суток. Подскажите, как построить перпендикуляр к прямой (задана 2-мя точками A(x,y) B(x,y)) начинающийся в точке B....


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Работа с объемным DOM в javascript
Htext 04.04.2025
Сегодня прочитал статью тут о расходах памяти в JS, ее утечках и т. п. И вот что вспомнил из своей недавней практики. Может, кому пригодится. Хотя, в той статье об этом тоже есть. Дело в том, что я. . .
Оптимизация производительности Node.js с помощью кластеризации
run.dev 04.04.2025
Масштабирование приложений для обработки тысяч и миллионов запросов — обыденная задача для многих команд. Node. js, благодаря своей асинхронной событийно-ориентированной архитектуре, стал популярной. . .
Управление зависимостями в Python с Poetry
py-thonny 04.04.2025
Стандартный инструмент для установки пакетов в Python - pip - прекрасно справляется с базовыми сценариями: установил пакет командой pip install и используешь его. Но что произойдёт, когда разные. . .
Мониторинг с Prometheus в PHP
Jason-Webb 04.04.2025
Prometheus выделяется среди других систем мониторинга своим подходом к сбору и хранению метрик. В отличие от New Relic, который использует агентный подход и отправляет данные во внешнее хранилище,. . .
Пакет Context в Golang: Управление потоками и ресурсами
golander 04.04.2025
Работа с горутинами в Go часто напоминает управление непослушными детьми - они разбегаются кто куда, делают что хотят и не всегда завершаются вовремя. К счастью, в Go 1. 7 появился пакет context,. . .
Контейнеризация React приложений с Docker
Reangularity 03.04.2025
Контейнеризация позволяет упаковать приложение со всеми его зависимостями в автономный контейнер, который можно запустить на любой платформе с установленным Docker. Это существенно упрощает процессы. . .
Свой попап в SwiftUI
mobDevWorks 03.04.2025
SwiftUI, как декларативный фреймворк от Apple, предоставляет множество инструментов для создания пользовательских интерфейсов. В нашем распоряжении есть такие API как alerts, popovers, action sheets. . .
Антипаттерны микросервисной архитектуры
ArchitectMsa 03.04.2025
Хорошо спроектированная микросервисная система может выдержать испытание временем, оставаясь гибкой, масштабируемой и устойчивой к большинству проблем. Такая архитектура обладает высоким уровнем. . .
std::mutex в C++: Советы и примеры использования
bytestream 03.04.2025
std::mutex - это механизм взаимного исключения, который гарантирует, что критический участок кода выполняется только одним потоком в каждый момент времени. Это простое, но могущественное средство. . .
Не удержался от оценки концепции двигателя Стирлинга.
Hrethgir 03.04.2025
Сколько не пытался - она выдавала правильные схемы, причём случайно рисовала горячие области в середине, холодные по краям, трубки с краёв в низ и магнит в соединяющей, но при этой выдавала описание. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru
Выделить код Копировать код Сохранить код Нормальный размер Увеличенный размер