Показать сообщение отдельно
Старый 04.12.2011, 15:01   #2
pepel
Мастер
 
Аватар для pepel
 
Регистрация: 23.09.2009
Адрес: ленобласть
Сообщений: 1,189
Написано 447 полезных сообщений
(для 2,526 пользователей)
Ответ: Функции 2d пересечений

Пересечение отрезка и окружности

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 файлы примера
Миниатюры
Нажмите на изображение для увеличения
Название: Безымянный.PNG
Просмотров: 889
Размер:	8.6 Кб
ID:	15654  
Вложения
Тип файла: rar Okr_i_otrezok.rar (478.4 Кб, 727 просмотров)
(Offline)
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо pepel за это полезное сообщение:
LLI.T.A.L.K.E.R. (09.01.2012), Nikich (10.08.2012)