Показать сообщение отдельно
Старый 08.01.2007, 12:23   #6
Render
Знающий
 
Регистрация: 12.07.2006
Сообщений: 283
Написано 16 полезных сообщений
(для 32 пользователей)
Re: В области квадрата

Вот реализация с поворотом точки . Работает просто идеально.

Graphics 800,600,32,2
SetBuffer BackBuffer()

Local x=50,y=50,width=500,height=100,ang#=10

Repeat
Cls
DrawRect(x,y,width,height,ang)
Text 0,0,PointInRect(x,y,width,height,ang,MouseX(),Mous
eY())
Flip
Until KeyDown(1)

Function DrawRect(x#,y#,width#,height#,ang#=0)
Local x1#=x +width *Cos(ang)
Local y1#=y +width *Sin(ang)
Local x2#=x +height*Cos(ang+90)
Local y2#=y +height*Sin(ang+90)
Local x3#=x2+width *Cos(ang)
Local y3#=y2+width *Sin(ang)
Line x,y,x1,y1
Line x,y,x2,y2
Line x1,y1,x3,y3
Line x2,y2,x3,y3
End Function

Function PointInRect(x#,y#,width#,height#,ang#,px#,py#)
Local l#=Sqr((px-x)^2+(py-y)^2)
Local ang2#=ATan2(py-y,px-x)
Local px2#=x+l*Cos(ang2-ang)
Local py2#=y+l*Sin(ang2-ang)
If (px2>x+width) Or (px2<x) Or (py2>y+height) Or (py2<y) Then
Return False
Else
Return True
EndIf
End Function

З.Ы. Спасибо Frank за идею.
(Offline)
 
Ответить с цитированием