Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.97/34: Рейтинг темы: голосов - 34, средняя оценка - 4.97
 Аватар для Kot_Enot
0 / 0 / 0
Регистрация: 03.12.2011
Сообщений: 33

пересечение фигур

26.02.2012, 17:42. Показов 6454. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет всем!
Как определить пересечение двух фигур: квадрата и триугольника? Квадрат задается координатами левого верхнего угла и нижнего правого, а триуголник задается координатами трёх вершин.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
26.02.2012, 17:42
Ответы с готовыми решениями:

Пересечение фигур
Даны две фигуры: Окружность с центром в точке (x0,y0) и радиусом r, и пятиугольник заданный координатами вершин. Как можно определить факт...

Виртуальная функция определяющая пересечение фигур
При наличии классов Circle(круг), Square (квадрат) и Triangle( треугольник), производных от Shape(фигура), определите функцию intersect()...

Пересечение двух прямых и проверка на пересечение
Доброго времени суток слизал функцию проверки отсюда:/segments_intersection_checking на всякий случай у меня она выглядит так: int...

3
 Аватар для Питекантроп
251 / 145 / 21
Регистрация: 14.06.2010
Сообщений: 340
26.02.2012, 18:54
нужно отследить только факт пересечения или узнать место пересечения?
0
 Аватар для Kot_Enot
0 / 0 / 0
Регистрация: 03.12.2011
Сообщений: 33
26.02.2012, 19:25  [ТС]
факт пересечения
0
 Аватар для Питекантроп
251 / 145 / 21
Регистрация: 14.06.2010
Сообщений: 340
26.02.2012, 21:09
Вот. Это на основе того, что я тебе кидал в ином посте
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
#include "math.h"
#include "windows.h"
#include "stdio.h"
 
struct fPoint
{
        float x,y;
        fPoint() {}
        fPoint(float x, float y)
        {
                this->x = x;
                this->y = y;
        }
};
 
static void rotate_points(float angle, fPoint * array, int arr_len)
{
        if (arr_len <= 1) return;
        float cs = cos(angle),
                sn = sin(angle);
        fPoint center(0,0);
        for (int i = 0; i < arr_len; i++)
        {
                center.x += array[i].x;
                center.y += array[i].y;
        }
        center.x /= arr_len;
        center.y /= arr_len;
 
        float dx, dy;
        while (arr_len--)
        {
                dx = array[arr_len].x - center.x;
                dy = array[arr_len].y - center.y;
                array[arr_len].x = dx * cs - sn * dy + center.x;
                array[arr_len].y = dx * sn + cs * dy + center.y;
        }
}
 
static void DrawFigure(HDC hdc, fPoint * array, int len)
{
        MoveToEx(hdc,array->x,array->y,0);
        while (len--) LineTo(hdc,array[len].x,array[len].y);
}
 
static bool IsIntersect(fPoint * array_1, int len_1, fPoint * array_2, int len_2)
{
#define vectP_z(v,a,b) (((v).x-(a).x)*((v).y-(b).y)-((v).y-(a).y)*((v).x-(b).x))
        int i,j,next_i,next_j;
        for (int i = 0; i < len_1; i++)
        {
                next_i = i == len_1 - 1 ? 0 : i + 1;
                for (j = 0; j < len_2; j++)
                {
                        next_j = j == len_2 - 1 ? 0 : j + 1;
                        if ( vectP_z(array_1[next_i],array_1[i],array_2[j]) *
                                vectP_z(array_1[next_i],array_1[i],array_2[next_j]) < 0 &&
                        vectP_z(array_2[next_j],array_2[j],array_1[i]) *
                                vectP_z(array_2[next_j],array_2[j],array_1[next_i]) < 0) return true;
                }
        }
        bool a = vectP_z(array_2[0],array_2[len_2 - 1],array_1[0]) < 0;
        for (j = 1; j < len_2; j++)
                if (a != vectP_z(array_2[j],array_2[j - 1],array_1[0]) < 0) break;
        if (j == len_2) return true;
 
        a = vectP_z(array_1[0],array_1[len_1 - 1],array_2[0]) < 0;
        for (i = 1; i < len_1; i++)
                if (a != vectP_z(array_1[i],array_1[i - 1],array_2[0]) < 0) break;
        return i == len_1;
}
 
class Triangle
{
public:
        fPoint points[3];
        Triangle() {}
        Triangle(const fPoint & p1,const fPoint & p2,const fPoint & p3)
        {
                points[0] = p1;
                points[1] = p2;
                points[2] = p3;
        }
        void rotate(float angle)
        {
                rotate_points(angle,points,3);
        }
        void Draw(HDC hdc)
        {
                DrawFigure(hdc,points,3);
        }
};
 
 
 
 
int main(int argc, char* argv[])
{
        Triangle tr(fPoint(50,50),fPoint(150,50),fPoint(75,120) );
 
      //  Triangle tr1(fPoint(60,60),fPoint(120,60),fPoint(75,100) );
      //  Triangle tr1(fPoint(160,60),fPoint(220,60),fPoint(175,100) );
        Triangle tr1(fPoint(100,60),fPoint(220,60),fPoint(175,100) );
 
        HWND hwnd = GetForegroundWindow();//GetDesktopWindow();
 
        HDC hdc=GetWindowDC(hwnd);
        HPEN hPen = CreatePen(1, 3, RGB(0,0,255));
 
        SelectObject(hdc, hPen);
        tr.Draw(hdc);
        tr1.Draw(hdc);
        ReleaseDC(hwnd,hdc);
        printf(IsIntersect(tr.points,3,tr1.points,3) ? "yes" : "no" );
        getchar();
        return 0;
}
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
26.02.2012, 21:09
Помогаю со студенческими работами здесь

Массив-пересечение
Помогите, пожалуйста, с заданием: Дано два целочисленных массива, состоящих из не повторяющихся чисел. Сформировать новый массив, который...

Пересечение прямых
Не могу сделать так,чтобы находил пересечения двух прямых(n штук) и выводил координаты пересечении. Вот что вышло. #include...

Пересечение треугольников в 3d
Вот например 2 треугольника: (для примера) struct Point { int X; int Y; int Z; };

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

Пересечение пятиугольников
Здравствуйте. Собственно сабж. Вообще по заданию нужно определить только факт пересечения, но мне было бы интересно и сами точки найти. Из...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
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