вычислить площадь треугольника в пространстве код на blitz3d
|
|
polopok | Дата: Понедельник, 13 Сентября 2010, 17:24 | Сообщение # 1 |
Начинающий
Группа: Пользователи
Сообщений: 13
Награды: 0
Замечания: 0%
Статус: ![](/on.gif)
| вычислить площадь треугольника в пространстве по трём точкам выложите код пожалуста
|
|
| |
polopok | Дата: Воскресенье, 26 Сентября 2010, 15:21 | Сообщение # 2 |
Начинающий
Группа: Пользователи
Сообщений: 13
Награды: 0
Замечания: 0%
Статус: ![](/on.gif)
| Вот готовое решение . проверяет находиться ли точка 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%
Статус: ![](/on.gif)
| Забыл сказать что это для 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
|
|
| |