[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
вычислить площадь треугольника в пространстве код на blitz3d
polopokДата: Понедельник, 13 Сентября 2010, 17:24 | Сообщение # 1
Начинающий
Группа: Пользователи
Сообщений: 13
Награды: 0
Замечания: 0%
Статус:
вычислить площадь треугольника в пространстве по трём точкам
выложите код пожалуста help
 
polopokДата: Воскресенье, 26 Сентября 2010, 15:21 | Сообщение # 2
Начинающий
Группа: Пользователи
Сообщений: 13
Награды: 0
Замечания: 0%
Статус:
Вот готовое решение . проверяет находиться ли точка x,y,z в треугольнике .

Code
Graphics3D 640,480  
SetBuffer BackBuffer()  
  camera=CreateCamera() :PositionEntity camera, 0 ,0 ,-4
light=CreateLight()
   
Global x#,y#,z#,  x0#,y0#,z0#,  x1#,y1#,z1#,  x2#,y2#,z2# ,s#,s1#,s2#,s3#,intriangle$

x#=0 :y#=0 :z#=0     : x0#=-3 :y0#=2 :z0#=0     :  x1#=0 :y1#=-2 :z1#=0 :  x2#=2 :y2#=1 :z2=0  
; --------CREATE------
sp= CreateSphere() :sp0= CreateSphere() :sp1= CreateSphere() :sp2= CreateSphere()
ScaleEntity sp, 0.1, 0.1, 0.1 :ScaleEntity sp0, 0.1, 0.1, 0.1 :ScaleEntity sp1, 0.1, 0.1, 0.1 :ScaleEntity sp2, 0.1, 0.1, 0.1
PositionEntity sp, x#, y#, z#  :PositionEntity sp0, x0#, y0#, z0#  :PositionEntity sp1, x1#, y1#, z1# :PositionEntity sp2, x2#, y2#, z2#
EntityColor sp, 255, 255, 255 :EntityColor sp0, 255, 0, 0 :EntityColor sp1, 0, 255, 0 :EntityColor sp2, 0, 0, 255  
While Not KeyDown( 1 ) ; 1 - esc
;========== ; formula ; ============================================================================================================
  s#= (Sqr(((y1#-y0#)* (z2#-z0#) -(z1#-z0#)* (y2#-y0#))^2   +((z1#-z0#)* (x2#-x0#) -(x1#-x0#)* (z2#-z0#))^2  +((x1#-x0#)* (y2#-y0#) -(y1#-y0#)* (x2#-x0#))^2 ))/2
s1#= (Sqr(((y1#-y0#)* (z#-z0#) -(z1#-z0#)* (y#-y0#))^2   +((z1#-z0#)* (x#-x0#) -(x1#-x0#)* (z#-z0#))^2  +((x1#-x0#)* (y#-y0#) -(y1#-y0#)* (x#-x0#))^2 ))/2
s2#= (Sqr(((y#-y0#)* (z2#-z0#) -(z#-z0#)* (y2#-y0#))^2   +((z#-z0#)* (x2#-x0#) -(x1#-x0#)* (z2#-z0#))^2  +((x#-x0#)* (y2#-y0#) -(y#-y0#)* (x2#-x0#))^2 ))/2
s3#= (Sqr(((y1#-y#)* (z2#-z#) -(z1#-z#)* (y2#-y#))^2   +((z1#-z#)* (x2#-x#) -(x1#-x#)* (z2#-z#))^2  +((x1#-x#)* (y2#-y#) -(y1#-y#)* (x2#-x#))^2 ))/2
   dlt#=s#*0.0001
If Abs(s# -(s1# +s2# +s3)) <dlt# Then intriangle$=" IN !" Else  intriangle$=" AUT "
;======================================================================================================================
If KeyDown( 203 )=True Then x# = x# -.1*0.1 ;   V     strelka vniz
If KeyDown( 205 )=True Then x# = x# +.1*0.1 ;     ^    strelka vverh
If KeyDown( 208 )=True Then y# = y# -.1*0.2 ;     <    strelka vlevo
If KeyDown( 200 )=True Then y# = y# +.1*0.2 ;      >    strelka vpravo
If KeyDown( 30  )=True Then z# = z# +.1*0.2 ;  A
If KeyDown( 44  )=True Then z# = z# -.1*0.2  ; Z
If KeyDown( 19  )=True Then z# = 0 :x# = 0 :y# = 0; R   reset

PositionEntity sp, x#, y#, z#
CameraProject (camera ,EntityX(sp0) ,EntityY(sp0) ,EntityZ(sp0))
spp0_x= ProjectedX#() :spp0_y= ProjectedY#()

CameraProject (camera ,EntityX(sp1) ,EntityY(sp1) ,EntityZ(sp1))
spp1_x= ProjectedX#() :spp1_y= ProjectedY#()

CameraProject (camera ,EntityX(sp2) ,EntityY(sp2) ,EntityZ(sp2))
spp2_x= ProjectedX#() :spp2_y= ProjectedY#()

CameraProject (camera ,EntityX(sp) ,EntityY(sp) ,EntityZ(sp))
spp_x= ProjectedX#() :spp_y= ProjectedY#()

UpdateWorld  
RenderWorld  
Line spp0_x ,spp0_y ,spp1_x ,spp1_y
Line spp1_x ,spp1_y ,spp2_x ,spp2_y
Line spp2_x ,spp2_y ,spp0_x ,spp0_y
Line spp0_x ,spp0_y ,spp_x ,spp_y
Line spp1_x ,spp1_y ,spp_x ,spp_y
Line spp2_x ,spp2_y ,spp_x ,spp_y
Text 0, 0, "   ABCD = "+intriangle$+"        S= "+s+" S1= "+s1+" S2= "+s2+" S3= "+s3;+" "++" "++" "++" "++" "++" "++" "++   
Flip : Wend : ClearWorld : End

 
polopokДата: Воскресенье, 26 Сентября 2010, 15:34 | Сообщение # 3
Начинающий
Группа: Пользователи
Сообщений: 13
Награды: 0
Замечания: 0%
Статус:
Забыл сказать что это для 3д ,а для 2д пример вот этот .

Code
Graphics3D 640,480  
SetBuffer BackBuffer()  
  camera=CreateCamera() :PositionEntity camera, 0 ,0 ,-4
light=CreateLight()  
Global x#,y#,z#,  x0#,y0#,z0#,  x1#,y1#,z1#,  x2#,y2#,z2# ,s#,s1#,s2#,s3#,intriangle
x#=0 :y#=0 :z#=0 :  x0#=0 :y0#=0 :z0#=0 :  x1#=0 :y1#=-2 :z1#=0 :  x2#=2 :y2#=1 :z2=0  
sp= CreateSphere() :sp0= CreateSphere() :sp1= CreateSphere() :sp2= CreateSphere()
ScaleEntity sp, 0.1, 0.1, 0.1 :ScaleEntity sp0, 0.1, 0.1, 0.1 :ScaleEntity sp1, 0.1, 0.1, 0.1 :ScaleEntity sp2, 0.1, 0.1, 0.1
PositionEntity sp, x#, y#, z#  :PositionEntity sp0, x0#, y0#, z0#  :PositionEntity sp1, x1#, y1#, z1# :PositionEntity sp2, x2#, y2#, z2#
EntityColor sp, 255, 255, 255 :EntityColor sp0, 255, 0, 0 :EntityColor sp1, 0, 255, 0 :EntityColor sp2, 0, 0, 255  

While Not KeyDown( 1 ) ; 1 - esc
;==============================================================================================
   s#=0.5*Abs((x2#-x1#)*(y0#-y1#)-(x0#-x1#)*(y0#-y1#))
   s1#=0.5*Abs((x2#-x#)*(y0#-y#)-(x0#-x#)*(y2#-y#))
   s2#=0.5*Abs((x#-x1#)*(y0#-y1#)-(x0#-x1#)*(y#-y1#))
   s3#=0.5*Abs((x2#-x1#)*(y#-y1#)-(x#-x1#)*(y2#-y1#))
   dlt#=s#*0.0001
If Abs(s# -(s1# +s2# +s3)) <dlt# intriangle=1111111111 Else  intriangle=0
;==============================================================================================
If KeyDown( 203 )=True Then x# = x# -.01*00.5 ;   V     strelka vniz
If KeyDown( 205 )=True Then x# = x# +.01*00.5 ;     ^    strelka vverh
If KeyDown( 208 )=True Then y# = y# -.01*00.5 ;     <    strelka vlevo
If KeyDown( 200 )=True Then y# = y# +.01*00.5 ;      >    strelka vpravo
If KeyDown( 30  )=True Then z# = z# +.01*0.5 ;  A
If KeyDown( 44  )=True Then z# = z# -.01*0.5  ; Z  

PositionEntity sp, x#, y#, z#
CameraProject (camera ,EntityX(sp0) ,EntityY(sp0) ,EntityZ(sp0))
spp0_x= ProjectedX#() :spp0_y= ProjectedY#()

CameraProject (camera ,EntityX(sp1) ,EntityY(sp1) ,EntityZ(sp1))
spp1_x= ProjectedX#() :spp1_y= ProjectedY#()

CameraProject (camera ,EntityX(sp2) ,EntityY(sp2) ,EntityZ(sp2))
spp2_x= ProjectedX#() :spp2_y= ProjectedY#()

CameraProject (camera ,EntityX(sp) ,EntityY(sp) ,EntityZ(sp))
spp_x= ProjectedX#() :spp_y= ProjectedY#()

UpdateWorld  
RenderWorld  
Line spp0_x ,spp0_y ,spp1_x ,spp1_y
Line spp1_x ,spp1_y ,spp2_x ,spp2_y
Line spp2_x ,spp2_y ,spp0_x ,spp0_y

Line spp0_x ,spp0_y ,spp_x ,spp_y
Line spp1_x ,spp1_y ,spp_x ,spp_y
Line spp2_x ,spp2_y ,spp_x ,spp_y

Text 0, 0, "   GPIQ = "+intriangle+"        S= "+s+" S1= "+s1+" S2= "+s2+" S3= "+s3
Flip : Wend : ClearWorld : End
 
  • Страница 1 из 1
  • 1
Поиск: