forum.boolean.name

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

pepel 04.12.2011 14:52

Функции 2d пересечений
 
Вложений: 2
Пишу тут физику для игрули и подумал может кому пригодятся функции

Пересечение прямоугольника и квадрата :
PHP код:

Function cross_square_and_rect(x1#,y1#,x2#,y2#,x#,y#,side#)

    
w#=x1-x2
    
h#=y1-y2
    
centerx#=x1-w/2
    
centery#=y1-h/2

    
If Abs(centerx x) <= (Abs(w) + side) / And Abs(centery y) <= (Abs(h) + side) / Return True
    
    
End 
Function 

можно переделать в функцию пересечения двух прямоугольников

прикрепил exe и *.bb примера

pepel 04.12.2011 15:01

Ответ: Функции 2d пересечений
 
Вложений: 2
Пересечение отрезка и окружности

PHP код:

Function cross(x#,y#,r#,x01#,y01#,x02#,y02#)

    
rr#=r*r

    
;Проверка на нахождение одного из концов отрезка в круге
    
If ((x01-x)*(x01-x)+(y01-y)*(y01-y)<=rr) Return 1
    
If ((x02-x)*(x02-x)+(y02-y)*(y02-y)<=rr) Return 1

    
;axis-aligned

    
If(y01=y02)
        If (((
x01<And x02>x) Or  (x01>And x02<x)) And Abs(y01-y)<=r) Return 1;
    EndIf        

    ;
Находим точку (xp,ypпересечения перпендикуляра от центра круга к линии,
    ;
которой принадлежит отрезок.
    
a#=(y01-y02)/(x01-x02)
    
b#=y01-a*x01
    
xp#=(y-b+x/a)/(a+1/a)
    
yp#=a*xp+b

    
If(y01=y02xp=x:yp=y01
    

    
If ((x01<xp And x02>xp) Or (x02<xp And x01>xp))
    ;
Находится внутри круга?
        
        If ((
xp-x)*(xp-x)+(yp-y)*(yp-y)<rr)     Return 
        
        
    
EndIf

;Return 
False 
End 
Function 

прикрепил exe и *.bb файлы примера


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

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