С Новым годом! Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
 Аватар для Deimon
35 / 35 / 6
Регистрация: 29.08.2009
Сообщений: 183

Проверка на пересечение ограниченной с двух сторон линии и TRect, многоугольники

26.10.2011, 19:00. Показов 2209. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Подскажите какими классами и функциями можно создать линию с двумя координатами и проверить ее на пересечение с TRect. И можно ли как-нибудь, создать многоугольную фигуру?

Буду рад любой помощи =)
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
26.10.2011, 19:00
Ответы с готовыми решениями:

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

Проверка на пересечение двух многоугольников
Всем привет. Очень нужна ваша помощь. Задача поставлена следующим образом: Проверить, пересекаются ли два заданных многоугольника на...

Наследование: точки, линии, многоугольники
Доброго вечера! Имеется следующие задание: Создать класс Point (точка). На его основе создать классы ColoredPoint и Line (линия). На...

8
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
26.10.2011, 20:35
Работа с регионами
Region Creation and Selection
Region Operations
1
 Аватар для Deimon
35 / 35 / 6
Регистрация: 29.08.2009
Сообщений: 183
26.10.2011, 20:57  [ТС]
последние две ссылки не открываются... вообще не чего с msdn.microsoft не открывается. Как исправить ? (
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
26.10.2011, 21:41
вопрос к вашему бравзеру или настройками системы-сети-файрвола
Миниатюры
Проверка на пересечение ограниченной с двух сторон линии и TRect, многоугольники   Проверка на пересечение ограниченной с двух сторон линии и TRect, многоугольники  
1
 Аватар для Deimon
35 / 35 / 6
Регистрация: 29.08.2009
Сообщений: 183
26.10.2011, 23:55  [ТС]
У меня не один комп не может открыть сайт msdn, раньше открывались... изменился только оператор интернет-связи (Beeline) ((((( Может копи пастом кто поможет, или страницу сохраните и мне файлом пришлете, очень надо =(
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
27.10.2011, 00:24
из закромов
Вложения
Тип файла: rar Regiont.rar (597.7 Кб, 33 просмотров)
1
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
27.10.2011, 00:29
собственно, msdn
Вложения
Тип файла: rar RegionCreation.rar (177.1 Кб, 22 просмотров)
1
 Аватар для Deimon
35 / 35 / 6
Регистрация: 29.08.2009
Сообщений: 183
27.10.2011, 20:27  [ТС]
Огромное спасибо за архивы! Были очень полезны.

Почитав я сообразил следующее. Хотелось бы узнать ваше мнение:
Задача банальная, есть TRect и надо проверить его на столкновение с массивом точек, описывающих замкнутую фигуру.


Создаем два объекта
C++
1
2
3
TRect rect;
TPoint points[12];
//заполняем
из точек создаем регион с помощью функции, задав параметр FillMode = ALTERNATE
C++
1
2
3
CreatePolygonRgn    
function CreatePolygonRgn (const Points; Count, FillMode: Integer): HRGN; stdcall;  
Создаёт полигональный регион по массиву точек Points с числом вершин Count с режимом заливки FillMode
А дальше я нашел функцию
C++
1
2
3
RectInRegion    
function RectInRegion (RGN: HRGN; const Rect: TRect): BOOL; stdcall;    
Определяет, "влазит" ли пряпоугольник Rect в границы региона rgn
У меня вопрос, какой из вариантов будет моим полученным результатом ?


Добавлено через 18 часов 40 минут
У меня получилось как в варианте А (как и хотелось)

Не по теме:

структуры данных с инфой

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
struct HOUSE
{
    int posx;
    int posy;
    TPoint Array[12];
    HRGN r;
} _house;
struct MAN
{
    int posx;
    int posy;
    TRect rect;
} _man;
заполнение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
_house.posx=100;
    _house.posy=100;
    _man.posx=250;
    _man.posy=250;
    _man.rect=(TRect(_man.posx,_man.posy,_man.posx+50,_man.posy+50));
    _house.Array[0]=TPoint(0+_house.posx,0+_house.posy);
    _house.Array[1]=TPoint(400+_house.posx,0+_house.posy);
    _house.Array[2]=TPoint(400+_house.posx,300+_house.posy);
    _house.Array[3]=TPoint(320+_house.posx,300+_house.posy);
    _house.Array[4]=TPoint(320+_house.posx,280+_house.posy);
    _house.Array[5]=TPoint(380+_house.posx,280+_house.posy);
    _house.Array[6]=TPoint(380+_house.posx,20+_house.posy);
    _house.Array[7]=TPoint(20+_house.posx,20+_house.posy);
    _house.Array[8]=TPoint(20+_house.posx,280+_house.posy);
    _house.Array[9]=TPoint(220+_house.posx,280+_house.posy);
    _house.Array[10]=TPoint(220+_house.posx,300+_house.posy);
    _house.Array[11]=TPoint(0+_house.posx,300+_house.posy);
    _house.r=CreatePolygonRgn(_house.Array,12,WINDING);
И теперь функцией можно проверять есть ли пересечение TRect с самой фигурой. True если есть и False соответственно если они не пересекаются.
C++
1
2
RectInRegion(_house.r,&TRect(_man.posx+x,_man.posy+y,_man.posx+50,_man.posy+50));
//там где 50, это произвольная величина... это размеры длин прямоугольника моего чубзика
к сожалению я не нашел функции чтобы проверить пересечение двух регионов. Пишите мне или сюда, если вы нашли способ проверить два региона на пересечение=(



Можете теперь помочь с пересечением отрезка и TRect или фигуры. ?
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
27.10.2011, 22:13
может, натолкнет на мысль: Проверка пересечения двух прямоугольников (TRect)
Также можно посмотреть в сторону функций
PtInRect

Описание:
C++
1
function PtInRect(var Rect: TRect; Point: TPoint): Bool;
Опpеделяет, лежит ли точка внутpи или на веpхней или левой стоpоне указанного пpямоугольника.

Паpаметpы:
Rect: Стpуктуpа TRect.
Points: Стpуктуpа TPoint.

Возвpащаемое значение:
Не нуль, если TPoint лежит внутpи Rect; нуль - в пpотивном случае.

Функция находится в файле user32.dll

PtInRgn

Описание:
C++
1
function PtInRgn(Rgn: HRgn; X, Y: Integer): Bool;
Опpеделяет, лежит ли точка внутpи указанной области.

Паpаметpы:
Rgn: Идентификатоp области.
X, Y: Точка.

Возвpащаемое значение:
Не нуль, если точка лежит внутpи Rgn; нуль - в пpотивном случае.

PtVisible

Описание:
C++
1
function PtVisible(DC: HDC; X, Y: Integer): Bool;
Опpеделяет, лежит ли точка внутpи области выpезания указанного устpойства.

Паpаметpы:
DC: Идентификатоp контекста устpойства.
X, Y: Точка.

Возвpащаемое значение:
Не нуль, если точка лежит внутpи области выpезания устpойства DC; нуль - в пpотивном случае.

Функция находится в файле gdi32.dll
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
27.10.2011, 22:13
Помогаю со студенческими работами здесь

Есть уравнения двух сторон и диагонали. Найти уравнение двух остальных сторон
У меня сейчас екзамен.Не могу решить задачу.Есть уравнения двух сторон 5x-3y+14=0 , 5x-3y-20=0 и диагонали х-4у-4=0.Найти уравнение двух...

Найти пересечение двух множеств и вывести данное пересечение и кол-во элементов в нем
Здравствуйте, помогите, пожалуйста, дорешать задачу. Условие: найти пересечение двух множеств и вывести данное пересечение и кол-во...

C++ пересечение сторон с осями координат
Треугольник задан координатами своих вершин A(xa, ya), B(xb, yb), C(xc, yc). Определить, пересекают ли его стороны оси координат....

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

Изменить толщину линии одной из сторон textbox-а
Подскажите как изменить толщину линии одной из сторон? _textbox.BorderThickness = new...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и источниками (напряжения, ЭДС и тока). Найти токи и напряжения во всех элементах. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru