13.10.2013, 12:09
|
#15
|
ПроЭктировщик
Регистрация: 17.07.2009
Сообщений: 182
Написано 51 полезных сообщений (для 71 пользователей)
|
Ответ: Voxel (octotree)
Не которое отклонение от темы , создавать новую не считаю нужным .
Проверьте ,код на тормазнутость ,пожалуйста .
Проверка попадают ли точки в зону видимости
Graphics 800,600,32,2
SetBuffer BackBuffer()
q = 500
cc = q*q
Dim fx(cc) :Dim fy(cc)
x=200 :y=200
For b= 0 To q
For a= 0 To q
c = a*b
If Rand(0,4)=0 Then
fx(c)=100+a
fy(c)=50+b
col =col +1
EndIf
Next
Next
While Not KeyHit(1)
mx# = MouseX()
my# = MouseY()
If KeyDown(205) Then x=x+10
If KeyDown(203) Then x=x-10
If KeyDown(208) Then y=y+10
If KeyDown(200) Then y=y-10
If MouseDown(1) Then x=mx : y=my
Cls
Color 50,55,50
Line x,y,mx,my
LockBuffer BackBuffer()
For c= 0 To cc
d# = Dist#( x, y, mx, my )
If d = 0 Then d# = 0.0000001
dx# = (x-mx)/d
dy# = (y-my)/d
d2# = Dist#( x, y, fx(c), fy(c))
If d2 = 0 Then d2# = 0.0000001
dxv#= (x- fx(c))/d2
dyv# = (y-fy(c))/d2
ac# = ACos(dx*dxv+dy*dyv)
If ac <=30 Then WritePixel fx(c),fy(c),$666666,BackBuffer() Else WritePixel fx(c),fy(c),$fff,BackBuffer() ; угол обзора 60 градусов
Next
UnlockBuffer BackBuffer()
Text 20,20 ,"Total points "+col
Flip
Wend
End
Function Dist#( X1#, Y1#, X2#, Y2# )
Return Abs(( (X1 - X2)*(X1 - X2) + (Y1 - Y2)*(Y1 - Y2) )^0.5)
End Function
Function Q(ax,ay,bx,by,cx,cy) ;(cx,cy) - координаты точки
If (cy-ay)*(bx-ax)-(cx-ax)*(by-ay)=0 Then Return True Else Return False
End Function
__________________
Мой проект здесь
|
(Offline)
|
|