forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Полезные функции (http://forum.boolean.name/forumdisplay.php?f=17)
-   -   Пересечения 2д (http://forum.boolean.name/showthread.php?t=20040)

polopok 12.10.2015 19:23

Пересечения 2д
 
Вложений: 2
На данный момент вычисляются пересечения :


прямоугольник с прямоугольником
_______________________
круга с кругом
круга с линией
круга с прямоугольником
_______________________
линия с линией
линия с прямоугольником
_______________________
Точка с линией
Точка с треугольником
Точка с кругом
Точка с эллипсом
Точка с прямоугольником
Точка с полигоном
_______________________
в следующих вариантах луч двунаправленный :

Луч с кругом
Луч с лучом
Луч с линией
Луч с прямоугольником
Луч с треугольником
Луч с полигоном (4 точки)
_______________________
в следующих вариантах луч одним направлением :

Луч от точки с кругом
Луч от точки с линией
Луч от точки с прямоугольником
Луч от точки с треугольником
Луч от точки с полигоном (4 точки)
_______________________

В дальнейшем добавлю и другие пересечения .
Так же вычисляются точки их пересечений и присутствия внутри фигуры .
Код и демка + .exe
Вложение 21976

Обновление № 5_1: исправлено
Вложение 21989

Randomize 12.10.2015 20:13

Ответ: Пересечения 2д
 
Вот, таким штукам в блице учиться в самый раз, так держать :super:

Придирки:
Мне кажется, что обновлять rezultX, rezultY .. rezultXX нужно в любом случае случилось пересечение или нет. Сбрасывать хотя бы в нули.

LineToRectangle очень здорово по несколько раз перезаписывает глобальные переменные.

Ну и мелочи:
1 rezult правильне написать как resultX
2 PointToLine действительно необходим когда есть CircleToLine?
3 В функциях CircleToLine, CircleToRectangle, LineToRectangle нужно бы тоже указать Local для внутренних переменных как и в остальных ф-циях для порядку.

polopok 12.10.2015 20:51

Ответ: Пересечения 2д
 
Цитата:

Сообщение от Randomize (Сообщение 300471)
Вот, таким штукам в блице учиться в самый раз, так держать :super:

Придирки:
Мне кажется, что обновлять rezultX, rezultY .. rezultXX нужно в любом случае случилось пересечение или нет. Сбрасывать хотя бы в нули.

LineToRectangle очень здорово по несколько раз перезаписывает глобальные переменные.

Ну и мелочи:
1 rezult правильне написать как resultX
2 PointToLine действительно необходим когда есть CircleToLine?
3 В функциях CircleToLine, CircleToRectangle, LineToRectangle нужно бы тоже указать Local для внутренних переменных как и в остальных ф-циях для порядку.

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

по 1 пункту rezult возвращает : 0 - если не пересекает ,1 -пересекает , 2 - находится внутри и это важно !
по 2 пункту : они различаются ,если не заметили ,нет извлечение корня , а это плюс производительности .
по 3 пункту : не трудно поправить :@

moka 13.10.2015 02:55

Ответ: Пересечения 2д
 
Было дело 12.06.2007 (8 лет и 4 месяца тому назад).
BlitzMax, функции пересечения отрезков, и отрезка с окружностью. А также данные о пересечениях, на основе которых я после сделал 2д физику а-ля line rider.
http://moka.ucoz.ru/load/0-0-0-27-20

Такое лучше учить на canvas2d на самом деле и JS.
Т.к. не будешь отвлекаться на рендер и другие не нужные вещи связанные с платформой.

polopok 13.10.2015 03:24

Ответ: Пересечения 2д
 
Intersection.js

copyright 2002, Kevin Lindsey
За основу брал и из других источников ,просто давно заметил отсутствия единства функций ,неудобно из проекта в проект тащить кусками . А так вроде как либа получается :)

polopok 13.10.2015 14:41

Ответ: Пересечения 2д
 
Вложений: 1
Файл
Код:

intersections2d.bb
=>> Вложение 21979
Исправлена функция PointToLine
Добавлены пересечения :
Точка с треугольником
Точка с кругом
Точка с эллипсом
Точка с прямоугольником

polopok 13.10.2015 19:10

Ответ: Пересечения 2д
 
Вложений: 1
Новое обновление .
Исправлена функция PointToTriangle
переделаны вводные параметры для Rectangle ,теперь задаются значения как и для обычного Rect. Сокращено название функции с Rectangle на Rect .
Добавлено пересечение прямоугольник с прямоугольником .
замените файл intersections2d.bb на тот ,что приложен ниже ...
Вложение 21981

moka 13.10.2015 20:40

Ответ: Пересечения 2д
 
Код не открывал, сразу отвечал:
Поворачивать прямоугольник можно? :)

polopok 14.10.2015 04:44

Ответ: Пересечения 2д
 
Можно ,но при повороте будет работать только пересечение с краем ,
в следующих обновлениях исправлю это.

polopok 14.10.2015 11:13

Ответ: Пересечения 2д
 
Вложений: 1
[php]
Цитата:

Сообщение от moka (Сообщение 300526)
Код не открывал, сразу отвечал:
Поворачивать прямоугольник можно? :)

Теперь можно :).
добавил функцию PointToPoly , отличается от функции PoinToRect этим :
1) задаётся каждая координата прямоугольника отдельно
2) координаты прямоугольника могут располагаться не пропорционально
3) определяется точка внутри ,даже когда точки повёрнуты

замените файл intersections2d.bb на тот ,что приложен ниже ...
Вложение 21983

polopok 14.10.2015 13:41

Ответ: Пересечения 2д
 
Вложений: 1
Обновление №4.
Добавлены пересечения :
Луч с лучом
Луч с линией
Луч с прямоугольником
Луч с треугольником
Луч с полигоном (4 точки)

Вложение 21985

Так же альтернативная LineToLine2 функция (мешает ? удалите.)

polopok 14.10.2015 14:52

Ответ: Пересечения 2д
 
Вложений: 1
Обновление №5.
Добавлены пересечения :
Луч с кругом
в следующих вариантах луч одно направленный
Луч от точки с кругом
Луч от точки с линией
Луч от точки с прямоугольником
Луч от точки с треугольником
Луч от точки с полигоном (4 точки)

Вложение 21987


Часовой пояс GMT +4, время: 11:14.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot