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

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

26.02.2012, 17:42. Показов 6489. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru