Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > Blitz3D > 3D-программирование

3D-программирование Вопросы, касающиеся программирования 3D мира

Ответ
 
Опции темы
Старый 13.09.2010, 19:29   #1
polopok
ПроЭктировщик
 
Регистрация: 17.07.2009
Сообщений: 182
Написано 51 полезных сообщений
(для 71 пользователей)
как найти точку в треугольнике 3d в координатах?

как найти точку в треугольнике 3d в координатах?
пример на си переведите кто-нибудь на блитз. очень надо
Код на C++

    1.
       double get_triangle_dim(Point3D p1, Point3D p2, Point3D p3){
    2.
       Point3D v1,v2,vp;
    3.
       v1.x=p2.x-p1.x;
    4.
       v1.y=p2.y-p1.y;
    5.
       v1.z=p2.z-p1.z;
    6.
       v2.x=p3.x-p1.x;
    7.
       v2.y=p3.y-p1.y;
    8.
       v2.z=p3.z-p1.z;
    9.
       vp.x=v1.y*v2.z-v1.z*v2.y;
   10.
       vp.y=v1.z*v2.x-v1.x*v2.z;
   11.
       vp.z=v1.x*v2.y-v1.y*v2.x;
   12.
       return(sqrt(vp.x*vp.x+vp.y*vp.y+vp.z*vp.z)/2);
   13.
       }
(Offline)
 
Ответить с цитированием
Старый 13.09.2010, 20:13   #2
DeeJex
Разработчик
 
Аватар для DeeJex
 
Регистрация: 24.02.2010
Адрес: Новороссийск
Сообщений: 485
Написано 112 полезных сообщений
(для 329 пользователей)
Ответ: как найти точку в треугольнике 3d в координатах?

Сообщение от polopok Посмотреть сообщение
пример на си переведите кто-нибудь на блитз. очень надо
Код на C++

    1.
       double get_triangle_dim(Point3D p1, Point3D p2, Point3D p3){
    2.
       Point3D v1,v2,vp;
    3.
       v1.x=p2.x-p1.x;
    4.
       v1.y=p2.y-p1.y;
    5.
       v1.z=p2.z-p1.z;
    6.
       v2.x=p3.x-p1.x;
    7.
       v2.y=p3.y-p1.y;
    8.
       v2.z=p3.z-p1.z;
    9.
       vp.x=v1.y*v2.z-v1.z*v2.y;
   10.
       vp.y=v1.z*v2.x-v1.x*v2.z;
   11.
       vp.z=v1.x*v2.y-v1.y*v2.x;
   12.
       return(sqrt(vp.x*vp.x+vp.y*vp.y+vp.z*vp.z)/2);
   13.
       }
Это было тяжело, учитывая что в блице хреновое ооп, а я не знаю что такое sqrt(тупо изменил на sqr)
Function get_triangle_dim#(x1#,y1#,z1#,x2#,y2#,z2#,x3#,y3#,z3#)

Local vx1#,vy1#,vz1#,vxp#,vyp#,vzp#

vx1=x2-x1
vy1=y2-y1
vz1=z2-z1

vx2=x3-x1
vy2=y3-y1
vz2=z3-z1

vxp=y1*z2-z1*y2
vyp=z1*x2-x1*z2
vzp =x1*y2-y1*x2

Return Sqr (vxp*vxp+vyp*vyp+vzp*vzp)/2

End Function
(Offline)
 
Ответить с цитированием
Старый 13.09.2010, 20:18   #3
baton4ik
Дэвелопер
 
Аватар для baton4ik
 
Регистрация: 21.11.2009
Адрес: Киев
Сообщений: 1,699
Написано 657 полезных сообщений
(для 1,962 пользователей)
Ответ: как найти точку в треугольнике 3d в координатах?

Сообщение от DeeJex Посмотреть сообщение
Это было тяжело, учитывая что в блице хреновое ооп, а я не знаю что такое sqrt(тупо изменил на sqr)
ЛОЛШТО? Погуглить не пробовал? sqr - это квадрат числа, а sqrt - корень. Учитывая это, твой пример очень ценен
P.S. В блитце ВООБЩЕ нету ООП
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Igor (13.09.2010)
Старый 13.09.2010, 21:38   #4
Randomize
[object Object]
 
Аватар для Randomize
 
Регистрация: 01.08.2008
Адрес: В России
Сообщений: 4,355
Написано 2,471 полезных сообщений
(для 6,853 пользователей)
Ответ: как найти точку в треугольнике 3d в координатах?

к слову тут ооп и не пахнет.
Вольная вариация:
Type Point3D
    Field x#,y#,z#
End Type

Function CreatePoint3D.Point3D(x#,y#,z#)
 Local p.Point3D = New Point3D
 p\x=x
 p\y=y
 p\z=z
 Return p
End Function

Function get_triangle_dim(p1.Point3D, p2.Point3D, p3.Point3D)
       Local v1.Point3D = New Point3D
       Local v2.Point3D = New Point3D
       Local vp.Point3D = New Point3D
       v1\x=p2\x-p1\x;
       v1\y=p2\y-p1\y;
       v1\z=p2\z-p1\z;
       v2\x=p3\x-p1\x;
       v2\y=p3\y-p1\y;
       v2\z=p3\z-p1\z;
       vp\x=v1\y*v2\z-v1\z*v2\y;
       vp\y=v1\z*v2\x-v1\x*v2\z;
       vp\z=v1\x*v2\y-v1\y*v2\x;
       return(sqr(vp\x*vp\x+vp\y*vp\y+vp\z*vp\z)/2);
End Function
Хотя заместо Point3D можно использовать пивоты.

SQR - Square Root
Blitz3D Docs This command will return the square root of a specified value. The value returned is a floating point number.
__________________
Retry, Abort, Ignore? █
Intel Core i7-9700 4.70 Ghz; 64Gb; Nvidia RTX 3070
AMD Ryzen 7 3800X 4.3Ghz; 64Gb; Nvidia 1070Ti
AMD Ryzen 7 1700X 3.4Ghz; 8Gb; AMD RX 570
AMD Athlon II 2.6Ghz; 8Gb; Nvidia GTX 750 Ti
(Offline)
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо Randomize за это полезное сообщение:
DeeJex (13.09.2010), polopok (13.09.2010)
Старый 13.09.2010, 21:44   #5
DeeJex
Разработчик
 
Аватар для DeeJex
 
Регистрация: 24.02.2010
Адрес: Новороссийск
Сообщений: 485
Написано 112 полезных сообщений
(для 329 пользователей)
Ответ: как найти точку в треугольнике 3d в координатах?

Сообщение от baton4ik Посмотреть сообщение
P.S. В блитце ВООБЩЕ нету ООП
а чем тебе типы не ооп, пускай и без методов?

upd
(Offline)
 
Ответить с цитированием
Старый 13.09.2010, 21:49   #6
Randomize
[object Object]
 
Аватар для Randomize
 
Регистрация: 01.08.2008
Адрес: В России
Сообщений: 4,355
Написано 2,471 полезных сообщений
(для 6,853 пользователей)
Ответ: как найти точку в треугольнике 3d в координатах?

Сообщение от DeeJex Посмотреть сообщение
B блице нет sqrt :p
Fixed.
__________________
Retry, Abort, Ignore? █
Intel Core i7-9700 4.70 Ghz; 64Gb; Nvidia RTX 3070
AMD Ryzen 7 3800X 4.3Ghz; 64Gb; Nvidia 1070Ti
AMD Ryzen 7 1700X 3.4Ghz; 8Gb; AMD RX 570
AMD Athlon II 2.6Ghz; 8Gb; Nvidia GTX 750 Ti
(Offline)
 
Ответить с цитированием
Старый 13.09.2010, 21:50   #7
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений
(для 20,935 пользователей)
Ответ: как найти точку в треугольнике 3d в координатах?

sqr != sqrt

в ряде языков:
sqr - квадарат числа
sqrt - кв.корень числа
в блитце:
sqr - кв.корень числа
sqrt - не существует
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо impersonalis за это полезное сообщение:
baton4ik (13.09.2010), DeeJex (13.09.2010)
Старый 13.09.2010, 21:52   #8
Randomize
[object Object]
 
Аватар для Randomize
 
Регистрация: 01.08.2008
Адрес: В России
Сообщений: 4,355
Написано 2,471 полезных сообщений
(для 6,853 пользователей)
Ответ: как найти точку в треугольнике 3d в координатах?

Сообщение от impersonalis Посмотреть сообщение
sqr != sqrt
В справке блица написано, что возвращает кв. корень числа.
Print Sqr(4)
WaitKey()
Почему 2, насяйника?

Дык я оказался прав.
Говорим то о Blitz3D.
__________________
Retry, Abort, Ignore? █
Intel Core i7-9700 4.70 Ghz; 64Gb; Nvidia RTX 3070
AMD Ryzen 7 3800X 4.3Ghz; 64Gb; Nvidia 1070Ti
AMD Ryzen 7 1700X 3.4Ghz; 8Gb; AMD RX 570
AMD Athlon II 2.6Ghz; 8Gb; Nvidia GTX 750 Ti
(Offline)
 
Ответить с цитированием
Старый 13.09.2010, 21:55   #9
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений
(для 20,935 пользователей)
Ответ: как найти точку в треугольнике 3d в координатах?

я к тому что надо аккуратно портировать с С++ эту команду. Это как http://ru.wikipedia.org/wiki/Ложный_друг_переводчика в естественных языках
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Randomize (13.09.2010)
Старый 13.09.2010, 21:55   #10
polopok
ПроЭктировщик
 
Регистрация: 17.07.2009
Сообщений: 182
Написано 51 полезных сообщений
(для 71 пользователей)
Ответ: как найти точку в треугольнике 3d в координатах?

это -функция вычисления площади треугольника в пространстве
взял её здесь http://www.dmtsoft.ru/bn/328/as/oneaticleshablon
чтобы проверить принадлежит точка D данному треугольнику ABC надо
проверить равенство площадей S.
тоесть :
S = ABC ;прощадь треугольника ABC
S1= ABD
S2= BCD
S3= ACD

if S= (S1 +S2 +S3) then true else false
(Offline)
 
Ответить с цитированием
Старый 13.09.2010, 21:59   #11
polopok
ПроЭктировщик
 
Регистрация: 17.07.2009
Сообщений: 182
Написано 51 полезных сообщений
(для 71 пользователей)
Ответ: как найти точку в треугольнике 3d в координатах?

ещё вариант : вектора

вектор AB = B - A = (5,4,7) - (6,8,2) = (-1,-4,5);
вектор AC = C - A = (2,4,7) - (6,8,2) = (-4,-4,5);

Площадь треугольника = (1/2) * Abs(AB x AC)
(половина модуля векторного произведения написанных выше векторов)
Осталось сосчитать векторное произведение и его модуль.
(Offline)
 
Ответить с цитированием
Старый 13.09.2010, 21:59   #12
Randomize
[object Object]
 
Аватар для Randomize
 
Регистрация: 01.08.2008
Адрес: В России
Сообщений: 4,355
Написано 2,471 полезных сообщений
(для 6,853 пользователей)
Ответ: как найти точку в треугольнике 3d в координатах?

Local Triangle_S = get_triangle_dim(CreatePoint3D(-1,0,0),CreatePoint3D(0,1,0),CreatePoint3D(1,0,0))
Print Triangle_S 
WaitKey()
Используя мой код.
Площадь находит верно.
__________________
Retry, Abort, Ignore? █
Intel Core i7-9700 4.70 Ghz; 64Gb; Nvidia RTX 3070
AMD Ryzen 7 3800X 4.3Ghz; 64Gb; Nvidia 1070Ti
AMD Ryzen 7 1700X 3.4Ghz; 8Gb; AMD RX 570
AMD Athlon II 2.6Ghz; 8Gb; Nvidia GTX 750 Ti
(Offline)
 
Ответить с цитированием
Старый 13.09.2010, 22:18   #13
polopok
ПроЭктировщик
 
Регистрация: 17.07.2009
Сообщений: 182
Написано 51 полезных сообщений
(для 71 пользователей)
Ответ: как найти точку в треугольнике 3d в координатах?

ещё про площадь http://otvet.mail.ru/question/20048003/
(Offline)
 
Ответить с цитированием
Старый 13.09.2010, 23:46   #14
polopok
ПроЭктировщик
 
Регистрация: 17.07.2009
Сообщений: 182
Написано 51 полезных сообщений
(для 71 пользователей)
Ответ: как найти точку в треугольнике 3d в координатах?

ничего не получается !!!!!
вот два примера кода :
1)
Type Point3D
    Field x#,y#,z#
End Type


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#,dlt#,intriangle
Global xx1#,yy1#,zz1#,xx2#,yy2#,zz2#,xx0#,yy0#,zz0#
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 


CreatePoint3D.Point3D(x#,y#,z#)
CreatePoint3D.Point3D(x1#,y1#,z1#)
CreatePoint3D.Point3D(x2#,y2#,z2#)
CreatePoint3D.Point3D(x0#,y0#,z0#)

;m= CreateMesh()
;s= CreateSurface(m)
;v0 = AddVertex (s, x0, y0, z0, 0 ,0) 
;v1 = AddVertex (s, x1, y1, z1, 1 ,0) 
;v2 = AddVertex (s, y2, y2, z2, 1,1) 
 
;tri = AddTriangle (s,v0,v1,v2)
;UpdateNormals m  :EntityFX m, 1+16 
While Not KeyDown( 1 ) ; 1 - esc

s= get_triangle_dim(p1.Point3D, p2.Point3D, p3.Point3D)
s1= get_triangle_dim(p1.Point3D, p2.Point3D, p3.Point3D)
s2= get_triangle_dim(p1.Point3D, p2.Point3D, p3.Point3D)
s3= get_triangle_dim(p1.Point3D, p2.Point3D, p3.Point3D)


If s= (s1+s2+s3) Then intriangle=1111111111 Else  intriangle=0

;x# = MouseX() : y# = MouseY()

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
;------------------------------------------------------------------------------
Function CreatePoint3D.Point3D(x#,y#,z#)
 Local p.Point3D = New Point3D
 px=x
 py=y
 pz=z
 Return p
End Function

Function get_triangle_dim(p1.Point3D, p2.Point3D, p3.Point3D)
       
       v1x= p2x- p1x;
       v1y= p2y- p1y;
       v1z= p2z- p1z;
       v2x= p3x- p1x;
       v2y= p3y- p1y;
       v2z= p3z- p1z;

       vpx= v1y *v2z -v1z*v2y;
       vpy= v1z *v2x -v1x*v2z;
       vpz= v1x *v2y -v1y*v2x;
       Return(Sqr(vpx *vpx +vpy *vpy +vpz *vpz)/2);
End Function
2)

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#,dlt#,intriangle
Global xx1#,yy1#,zz1#,xx2#,yy2#,zz2#,xx0#,yy0#,zz0#
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 
;m= CreateMesh()
;s= CreateSurface(m)
;v0 = AddVertex (s, x0, y0, z0, 0 ,0) 
;v1 = AddVertex (s, x1, y1, z1, 1 ,0) 
;v2 = AddVertex (s, y2, y2, z2, 1,1) 
 
;tri = AddTriangle (s,v0,v1,v2)
;UpdateNormals m  :EntityFX m, 1+16 
While Not KeyDown( 1 ) ; 1 - esc


 s= get_triangle_dim#(x1#,y1#,z1#,x2#,y2#,z2#,x0#,y0#,z0#)
s0= get_triangle_dim#(x#,y#,z#,x2#,y2#,z2#,x0#,y0#,z0#)
s1= get_triangle_dim#(x1#,y1#,z1#,x#,y#,z#,x0#,y0#,z0#)
s2= get_triangle_dim#(x1#,y1#,z1#,x2#,y2#,z2#,x#,y#,z#)

If s= (s1+s2+s0) Then intriangle=1111111111 Else  intriangle=0

;x# = MouseX() : y# = MouseY()

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

Function get_triangle_dim#(xx1#,yy1#,zz1#,xx2#,yy2#,zz2#,xx0#,yy0#,zz0#)

Local vx1#,vy1#,vz1#,vxp#,vyp#,vzp#

vx1=xx2-xx1
vy1=yy2-yy1
vz1=zz2-zz1

vx2=xx0-xx1
vy2=yy0-yy1
vz2=zz0-zz1

vxp=yy1*zz2-zz1*yy2
vyp=zz1*xx2-xx1*z2
vzp =xx1*yy2-yy1*xx2

Return (Sqr (vxp*vxp+vyp*vyp+vzp*vzp)/2)

End Function
ужассссс!!!!


вод код находит точку в треугольнике 3д пространстве , но только по оси X ,Y

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 
;m= CreateMesh()
;s= CreateSurface(m)
;v0 = AddVertex (s, x0, y0, z0, 0 ,0) 
;v1 = AddVertex (s, x1, y1, z1, 1 ,0) 
;v2 = AddVertex (s, y2, y2, z2, 1,1) 
 
;tri = AddTriangle (s,v0,v1,v2)
;UpdateNormals m  :EntityFX m, 1+16 
While Not KeyDown( 1 ) ; 1 - esc

  

 s#=0.5*Abs((x2#-x1#)*(y0#-y1#)-(x0#-x1#)*(y0#-y1#)); // ??????? ???????????? (?1,?1)(?2,?2)(?3,?3)
  s1#=0.5*Abs((x2#-x#)*(y0#-y#)-(x0#-x#)*(y2#-y#));  // ??????? ???????????? (?,?)(?2,?2)(?3,?3)
  s2#=0.5*Abs((x#-x1#)*(y0#-y1#)-(x0#-x1#)*(y#-y1#)); // ??????? ???????????? (?1,?1)(?,?)(?3,?3)
  s3#=0.5*Abs((x2#-x1#)*(y#-y1#)-(x#-x1#)*(y2#-y1#)); // ??????? ???????????? (?1,?1)(?2,?2)(?,?)

  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
(Offline)
 
Ответить с цитированием
Старый 13.09.2010, 23:54   #15
polopok
ПроЭктировщик
 
Регистрация: 17.07.2009
Сообщений: 182
Написано 51 полезных сообщений
(для 71 пользователей)
Ответ: как найти точку в треугольнике 3d в координатах?

      //собственно, само векторное произведение. Здесь vector - математичексий 3-мерный вектор
      vector vprod(const vector &a, const vector &b, const vector &c)
      {
          vector v1=b-a, v2=c-a;
          return vector(v1.y*v2.z-v1.z*v2.y,
              v2.x*v1.z-v1.x*v2.z,
              v1.x*v2.y-v1.y*v2.x);
      }
       
      //Проверка принадлежности точки d треугольнику abc
      //abs - длина вектора
      bool inner(const vector &a, const vector &b,
          const vector &c, const vector &d)
      {
          return (abs(vprod(a,b,c))==abs(vprod(a,d,b))
              +abs(vprod(b,d,c))+abs(vprod(c,d,a)));
      }
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +4, время: 09:20.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com