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

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

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

Author24 — интернет-сервис помощи студентам
Мне нужно нарисовать контура и определить направление обхода координат. Нужно считать данные из 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
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.02.2019, 15:49
Ответы с готовыми решениями:

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

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

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

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

24
0 / 0 / 0
Регистрация: 12.02.2019
Сообщений: 11
20.02.2019, 17:02  [ТС] 21
Author24 — интернет-сервис помощи студентам
Может быть сделать так: считать вектора по парам от предыдущей координаты.
Например, координаты точек 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 22
Цитата Сообщение от Оптимистка Посмотреть сообщение
Может быть сделать так
Вроде бы все логично. Почти то же самое, только не общее начало, а для каждой пары свое... Получается мы не сектора отсекаем, а вдоль контура идем и смотрим направление из каждой точки к следующим двум...
Я не вижу что бы мешало сделать так.
0
0 / 0 / 0
Регистрация: 12.02.2019
Сообщений: 11
24.02.2019, 15:55  [ТС] 23
Еще такая мысль закралась... а вы потом собираетесь это для чего-то использовать? Или это упражнение "сдал и забыл" или зарядка для ума?
Если использовать потом, то я бы еще юниттесты написала бы для нескольких контуров, хорошо продумав какие контура могут быть наиболее интересны или проблемны
Да, я собираюсь использовать это дальше. Следующие что мне нужно сделать это сравнить вектора описывающие контур фигуры с вектором направления движения, разделив фигуру на низ и верх

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

Не по теме:

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

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

Вот такая фигурка. В 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
24.02.2019, 21:26
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.02.2019, 21:26
Помогаю со студенческими работами здесь

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
25
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru