Projection (3d advanced)

Help Contents Examples Projection (3d advanced)
PythagorasTree (fractal) Reflection

Projection (3d advanced)

This advanced 3d example illustrates how to use a button menu to toggle projections of a triangle onto the xy-, yz- and zx-planes and rotation of the view point on and off.

run "graphix
run "win

make "u0 point 8 4 7
make "u1 point 1 2 9
make "u2 point 10 7 1
make "u3 point 2 15 5
make "v  point 10 8 9

make "arial font "arial 0

make "ts (set
     "color rgb 0 0 0
     "radiusx 1
     "radiusy 1
     "mode 2
     "focus vector 1 1 0
     "spin 130)

make "u0t styled (text "u0 :arial :u0) :ts
make "u1t styled (text "u1 :arial :u1) :ts
make "u2t styled (text "u2 :arial :u2) :ts
make "u3t styled (text "u3 :arial :u3) :ts
make "vt  styled (text "v  :arial :v)  :ts

; coordinate system
make "O   point 0 0 0
make "Ox  ray :O point 1 0 0
make "Oy  ray :O point 0 1 0
make "Oz  ray :O point 0 0 1

make "D 30
make "t 45
make "rot 0

to changeview
	make "t :t+:rot
	lookat point :D*(cos :t) :D*(sin :t) :D/2 point 5 5 5 point 0 0 1
end

changeview

to poly :points :color :pattern
	run bf :polygon
	make local "mode 2
end

make "su0 styled (segment :O :u0) (set "color rgb 100 100 100)
make "su1 styled (segment :O :u1) (set "color rgb 100 100 100)
make "su2 styled (segment :O :u2) (set "color rgb 100 100 100)
make "su3 styled (segment :O :u3) (set "color rgb 100 100 100)
make "sv  styled (segment :O :v)  (set "color rgb 100 100 100)

make "K0  poly (set :u0 :u1 :u2) (rgb 190  50 50 100) [xo ox]
make "K3  poly (set :u1 :u2 :u3) (rgb  50 190 50 100) [ox xo]
make "K0f styled (polygon (set :u0 :u1 :u2)) (set "color rgb 255 0 0)
make "K3f styled (polygon (set :u1 :u2 :u3)) (set "color rgb 0 255 0)

make "K03 styled (segment :u1 :u2) (set "color rgb 0 0 200 "width 3)
make "K12 styled (segment :u0 :u3) (set "color rgb 200 0 0 "width 3)

make "K12z :K12
make "K12z.initial.z 0
make "K12z.final.z 0
hidden "K12z
make "K12y :K12
make "K12y.initial.y 0
make "K12y.final.y 0
hidden "K12y
make "K12x :K12
make "K12x.initial.x 0
make "K12x.final.x 0
hidden "K12x

make "s2 (set "color rgb 100 100 255 "pattern "xo)
make "s3 (set "color rgb 255 100 100 "pattern "xo)
make "s4 (set "color rgb 255 0 0 "width 2)

make "btleft button 5 5 20 20 "'<-'
make "btleft.onclick [make "rot 0.5]

make "btright button 65 5 20 20 "'->'
make "btright.onclick [make "rot -0.5]

make "btstop button 25 5 40 20 "Stop
make "btstop.onclick [make "rot 0]

make "c7no button  5 25 20 20 "' '
make "c7x  button 25 25 20 20 "'x'
make "c7y  button 45 25 20 20 "'y'
make "c7z  button 65 25 20 20 "'z'

to c7no.onclick
	delete "Kk1
	delete "Kk2
	delete "K03a
	delete "K03sa
	delete "K03sb
	delete "K12sa
	delete "K12sb
end

to c7x.onclick
	make "K03a :K03
	make "K03a.initial.y 0
	make "K03a.final.y 0
	make "K03a.width 2

	make "Kk1 styled (segment :O :K12y.initial) :s4
	make "Kk2 styled (segment :O :K12y.final) :s4
	make "K03sa styled (segment :K03.initial :K03a.initial) :s2
	make "K03sb styled (segment :K03.final   :K03a.final) :s2
	make "K12sa styled (segment :K12.initial :K12y.initial) :s3
	make "K12sb styled (segment :K12.final   :K12y.final) :s3
end

to c7y.onclick
	make "K03a :K03
	make "K03a.initial.x 0
	make "K03a.final.x 0
	make "K03a.width 2
	make "Kk1 styled (segment :O :K12x.initial) :s4
	make "Kk2 styled (segment :O :K12x.final) :s4
	make "K03sa styled (segment :K03.initial :K03a.initial) :s2
	make "K03sb styled (segment :K03.final   :K03a.final) :s2
	make "K12sa styled (segment :K12.initial :K12x.initial) :s3
	make "K12sb styled (segment :K12.final   :K12x.final) :s3
end

to c7z.onclick
	make "K03a :K03
	make "K03a.initial.z 0
	make "K03a.final.z 0
	make "K03a.width 2
	make "Kk1 styled (segment :O :K12z.initial) :s4
	make "Kk2 styled (segment :O :K12z.final) :s4
	make "K03sa styled (segment :K03.initial :K03a.initial) :s2
	make "K03sb styled (segment :K03.final   :K03a.final) :s2
	make "K12sa styled (segment :K12.initial :K12z.initial) :s3
	make "K12sb styled (segment :K12.final   :K12z.final) :s3
end

repeat 3000000 [ changeview ]

PythagorasTree (fractal) Reflection