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

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

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

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

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

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

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

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

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

7
723 / 683 / 110
Регистрация: 29.05.2015
Сообщений: 4,111
25.01.2021, 19:17 2
Задача слишком сложна. Вряд-ли кто-то будет решать. За спасибо.
1
1 / 1 / 0
Регистрация: 12.10.2020
Сообщений: 14
25.01.2021, 20:25  [ТС] 3
9 класс физмат лицей)
0
723 / 683 / 110
Регистрация: 29.05.2015
Сообщений: 4,111
25.01.2021, 20:38 4
Ну для лицея физмата то такая задачка не должна представлять трудностей. Как я думаю.
1
3719 / 2648 / 761
Регистрация: 29.06.2020
Сообщений: 9,800
25.01.2021, 21:14 5
я профан в математике. но кажется тут надо несколько довольно простых геом, функций над точками и пару циклов

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

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

профит, не ?

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

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

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

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

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

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

Ну и уточнить - что делать, если на прямую между двумя точками попадает третья - отбраковывать? Тогда может получиться, что из ста точек ни одна прямая не соответствует условиям задачи.
1
6340 / 3511 / 1427
Регистрация: 07.02.2019
Сообщений: 8,977
25.01.2021, 22:32 7
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Эксперт С++
12802 / 6677 / 1797
Регистрация: 18.10.2014
Сообщений: 16,902
25.01.2021, 22:37 8
Общая идея алгоритма такова:

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

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

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

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

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

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

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

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

Построение прямой MatLab
В общем дело такое: у меня есть значение переменной sko и мне нужно показать его графически на...

Построение прямой по 5 точкам.
Добрый день. Есть 5 точек, нужно через них провести прямую. Приблизительно решение расписать...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Как настроить CI/CD с помощью Jenkins
InfoMaster 15.01.2025
Введение в CI/ CD и Jenkins В современной разработке программного обеспечения непрерывная интеграция (CI) и непрерывная доставка (CD) стали неотъемлемыми элементами процесса создания качественных. . .
Как написать микросервис на Go/Golang с Kafka и GitHub CI/CD
InfoMaster 14.01.2025
Определение микросервиса, преимущества использования Go/ Golang Микросервис – это архитектурный подход к разработке программного обеспечения, при котором приложение состоит из небольших, независимо. . .
Как написать микросервис с нуля на C# с RabbitMQ, CQRS и CI/CD
InfoMaster 14.01.2025
В современном мире разработки программного обеспечения микросервисная архитектура стала стандартом де-факто для создания масштабируемых и гибких приложений. Этот архитектурный подход предполагает. . .
Как создать интернет-магазин на PHP и JavaScript
InfoMaster 14.01.2025
В современном мире электронная коммерция стала неотъемлемой частью бизнеса. Создание собственного интернет-магазина открывает широкие возможности для предпринимателей, позволяя достичь большей. . .
Как написать Тетрис на Ассемблере
InfoMaster 14.01.2025
Тетрис – одна из самых узнаваемых и популярных компьютерных игр, созданная в 1984 году советским программистом Алексеем Пажитновым. За прошедшие десятилетия она завоевала симпатии миллионы людей по. . .
Как создать игру "Танчики" на Unity3d и C#
InfoMaster 14.01.2025
Разработка игр – это увлекательный процесс, сочетающий в себе творчество и технические навыки. В этой статье мы рассмотрим создание классической игры "Танчики" с использованием Unity3D и языка. . .
Организую платный онлайн микро-курс по доработке Android-клиента Telegram
_Ivana 14.01.2025
Официальная версия и распространенные форки не полностью устраивают? Сделай свою кастомную версию клиента! 4 занятия по 2 часа (2 недели пн, ср 19:00-21:00 по Москве). Первое вводное занятие. . .
Как создать приложение для фитнеса для iOS/iPhone на Kotlin
InfoMaster 14.01.2025
Создание собственного фитнес-приложения — это не только захватывающий, но и полезный процесс, ведь оно может стать вашим верным помощником на пути к здоровому и активному образу жизни. В современных. . .
Как создать приложение магазина для iOS/iPhone на Swift
InfoMaster 14.01.2025
Введение в разработку iOS-приложений Разработка приложений для iPhone и других устройств на базе iOS открывает огромные возможности для создания инновационных мобильных решений. В данной статье мы. . .
Это работает. Скорость асинхронной логики велика. Вопрос видимо останется в стабильности. Плата - огонь!
Hrethgir 13.01.2025
По прошлому проекту в Logisim Evolution https:/ / www. cyberforum. ru/ blogs/ 223907/ blog8781. html прилагаю файл архива проекта в Gowin Eda. Восьмибитный счётчик из сумматора+ генератор сигнала. . .
UserScript для подсветки кнопок языков программировани­­­­я в зависимости от текущего раздела
volvo 13.01.2025
В результате работы этого скрипта подсвечиваются нужные кнопки не только в форме быстрого ответа, но и при редактировании сообщения: / / ==UserScript== / / @name CF_DefaultLangSelect / / . . .
Введение в модели и алгоритмы машинного обучения
InfoMaster 12.01.2025
Машинное обучение представляет собой одну из наиболее динамично развивающихся областей искусственного интеллекта, которая фокусируется на разработке алгоритмов и методов, позволяющих компьютерам. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru