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

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

26.10.2011, 19:00. Показов 2205. Ответов 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
Ответ Создать тему
Новые блоги и статьи
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 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru