Тема: Voxel (octotree)
Показать сообщение отдельно
Старый 13.10.2013, 12:09   #15
polopok
ПроЭктировщик
 
Регистрация: 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)
 
Ответить с цитированием