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

Векторное сложение двух контуров

12.02.2019, 15:49. Показов 3053. Ответов 24
Метки mfc (Все метки)

Студворк — интернет-сервис помощи студентам
Мне нужно нарисовать контура и определить направление обхода координат. Нужно считать данные из txt файла, координаты в файле заданы последовательно и обход контура либо по часовой стрелке, либо против. Я так понимаю нужно векторно сложить вектора и если в результате будет +360 то это по часовой, а если -360 против часовой.

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


Тут читаю
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
// команды CDPLDoc
 
void CDPLDoc::On32771()
//Кнопка Чтение
{
    char    szBuffer[100];
    char    inpd[100];
    const char r[] = "r";
    FILE *myFile;
    fopen_s(&myFile, "C:\\Users\\acer-Pro\\Desktop\\test.txt", r);
    fscanf_s(myFile, "%d", &n);
    
    for (int i = 0; i < n; i++)
    {
        fscanf_s(myFile, "%lf %lf", &docs[i][0], &docs[i][1]);
    }
    
    UpdateAllViews(NULL);
}
 
 
Тут вывожу
// рисование CDPLView
 
void CDPLView::OnDraw(CDC* pDC)
 
{
    CDPLDoc* pDoc = GetDocument();
    ASSERT_VALID(pDoc);
    if (!pDoc)
        return;
    CPoint Pt[100];
 
    
    for (int i = 0; i < pDoc->n; i++)
    {
        Pt[i] = CPoint(pDoc->docs[i][0], pDoc->docs[i][1]);
    }
    pDC->Polyline(Pt, pDoc->n);
 
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
12.02.2019, 15:49
Ответы с готовыми решениями:

Конкатенация двух нибблов (сложение двух полубайт в байт)
Как из этих двух полубайт получить полноценный байт со значение &quot;0x3e&quot;? unsigned char first_nibbl = 0x03 unsigned char last_nibbl =...

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

Сложение, скалярное и векторное произведение векторов
Разработать программу с интерфейсом в среде программирования Lazarus. 9.5. Создать класс вектор на плоскости, поля класса_координаты...

24
0 / 0 / 0
Регистрация: 12.02.2019
Сообщений: 11
20.02.2019, 17:02  [ТС]
Студворк — интернет-сервис помощи студентам
Может быть сделать так: считать вектора по парам от предыдущей координаты.
Например, координаты точек 0(1,1), 1(1,4), 2(5,4), 3(5,1), 4(3,2). Считаем координаты от точки 0 для 1 и 2. Тогда первый вектор а = 1-0 = (1-1, 4-1) = (0, 3), второй вектор b = 2-0 = (5-1, 4-1) = (4, 3). Затем a x b = 0 * 3 - 3 * 4 = -12.
Следующий от координаты 1 для точек 2 и 3 и тд
0
391 / 64 / 11
Регистрация: 06.08.2018
Сообщений: 202
20.02.2019, 17:47
Цитата Сообщение от Оптимистка Посмотреть сообщение
Может быть сделать так
Вроде бы все логично. Почти то же самое, только не общее начало, а для каждой пары свое... Получается мы не сектора отсекаем, а вдоль контура идем и смотрим направление из каждой точки к следующим двум...
Я не вижу что бы мешало сделать так.
0
0 / 0 / 0
Регистрация: 12.02.2019
Сообщений: 11
24.02.2019, 15:55  [ТС]
Еще такая мысль закралась... а вы потом собираетесь это для чего-то использовать? Или это упражнение "сдал и забыл" или зарядка для ума?
Если использовать потом, то я бы еще юниттесты написала бы для нескольких контуров, хорошо продумав какие контура могут быть наиболее интересны или проблемны
Да, я собираюсь использовать это дальше. Следующие что мне нужно сделать это сравнить вектора описывающие контур фигуры с вектором направления движения, разделив фигуру на низ и верх

Не по теме:
Моя подпись хорошо подходит к вашему нику )))
Ага)
0
"C with Classes"
2022 / 1404 / 523
Регистрация: 16.08.2014
Сообщений: 5,885
Записей в блоге: 1
24.02.2019, 17:26

Не по теме:

Цитата Сообщение от Оптимистка Посмотреть сообщение
Моя подпись хорошо подходит к вашему нику
если ваши два ника сложит то тоже не плохо только Крашенная Оптимистка, но не наоборот.

0
0 / 0 / 0
Регистрация: 12.02.2019
Сообщений: 11
24.02.2019, 21:26  [ТС]
Я попробовала определить направление обхода контура только для первых трех координат потому что пока не понимаю как сделать так чтоб они смещались на одну каждый раз. И сделала чтобы соответствующая стрелка рисовалась для наглядной проверки

Вот такая фигурка. В txt такие координаты, 9 - количество точек нужных для рисования

9
100 300
100 400
500 400
500 100
100 100
100 200
400 200
400 300
100 300

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
void CDPLView::OnDraw(CDC* pDC)
 
{
    CDPLDoc* pDoc = GetDocument();
    ASSERT_VALID(pDoc);
    if (!pDoc)
        return;
    
    if 
        ((
        ((pDoc->docs[1][0]) - (pDoc->docs[0][0])) *
        ((pDoc->docs[2][1]) - (pDoc->docs[0][1])) - 
 
        ((pDoc->docs[2][0]) - (pDoc->docs[0][0])) *
        ((pDoc->docs[1][1]) - (pDoc->docs[0][1]))
            ) <= 0)
    //Рисование стрелки по часовой
    {
        pDC->MoveTo(10, 30);
        pDC->LineTo(80, 30);
        pDC->LineTo(75, 35);
        pDC->LineTo(75, 25);
        pDC->LineTo(80, 30);
    }
 
    else
        //Рисование стрелки против часовой
    {
        pDC->MoveTo(80, 30);
        pDC->LineTo(10, 30);
        pDC->LineTo(15, 35);
        pDC->LineTo(15, 25);
        pDC->LineTo(10, 30);
    }
 
    //Рисование контура
    CPoint Pt[100];
 
    for (int i = 0; i < pDoc->n; i++)
    {
        Pt[i] = CPoint(pDoc->docs[i][0], pDoc->docs[i][1]);
    }
    pDC->Polyline(Pt, pDoc->n);
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
24.02.2019, 21:26

Векторное сложение скоростей, найти скорость встречного ветра
Определить скорость встречного ветра, если пассажир автобуса, движущегося со скоростью 15м\с, заметил, что след капли дождя на боковом...

Преобразование схемы до двух контуров
Помогите преобразовать схему до двух контуров.

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

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

Векторная алгебра. Векторное произведение двух векторов
Определить длины диагоналей параллелограмма, построенного на векторах a = m + n и b = m - 2n, где m и n - еденичные векторы, угол между...


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

Или воспользуйтесь поиском по форуму:
25
Ответ Создать тему
Новые блоги и статьи
Транслитерация текста с кириллицы на латиницу (вариант №1)
Maks 11.11.2026
Решил облегчить жизнь себе и коллегам админам при создании электронных почтовых ящиков для пользователей, в результате написал обработку "Транслитерация текста" с кириллицы на латиницу, а в ней. . .
Книги по геймдизайну, левел-дизайну, игровым механикам и проектированию игрового опыта
8Observer8 08.11.2026
Содержание блога | English Version 1. 2003 - 06 - Designing Virtual Worlds (1st Edition) Автор: Richard A. Bartle | Объем: 768 стр. Ссылки: Amazon . . .
Родители токсичные абьюзеры по отношению к своим детям ругают их оскорбляют не любят
zorxor 08.11.2026
Жить в атмосфере постоянных оскорблений, критики и холодности со стороны родителей — это тяжелое и болезненное испытание, которое оставляет глубокие эмоциональные раны. Токсичное и абьюзивное. . .
Как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Ответ от Джемени ИИ.
zorxor 08.11.2026
Джемени, как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Многие люди, возвращаясь домой, сразу переодеваются в максимально свободную одежду или вовсе предпочитают. . .
Паттерн очереди действий/команд (Action / Command Queue). Система очереди действий и кат-сцен с SDL3 Callbacks, cglm и OpenGL
8Observer8 07.11.2026
Содержание блога | English Version Руководство для начинающих по реализации паттерна очереди действий/ команд (Action / Command Queue) на C++ (C++20) с использованием официального SDL3 Callbacks. . .
Проверка полного ФИО в типовом справочнике
Maks 07.11.2026
Решение реализовано в конфигурации КА2, на примере справочника "КонтактныеЛицаПартнеров". Задача: Запрет инициалов. Не допускаеть использование сокращений вида "И. И. ", "И. И. ", "И И" и. . .
Про "Windows must die!"
kumehtar 04.11.2026
Знаете, чет накатило. . . . Когда-то это было почти боевым кличем: мол, нормальный человек сидит на DOS, OS/ 2 или Linux, а вот это вот - Must Die. А теперь человек произносит «мастдай» с усмешкой - и. . .
Красочные поля с номером страницы svg+background-image
russiannick 04.11.2026
Красочные поля с номером страницы не менее важны чем в эпоху бумажных книг. Посему спешу представить почтеннейшей публике этот важный инструмент который эти поля и формирует. В процессе разработки. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru