Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.postscript > #961
| From | "luser.droog" <luser.droog@gmail.com> |
|---|---|
| Newsgroups | comp.lang.postscript |
| Subject | Heineken time |
| Date | 2012-09-15 16:50 -0500 |
| Organization | unorganized |
| Message-ID | <k32t79$bmo$1@dont-email.me> (permalink) |
| References | (15 earlier) <4b7086f3-24d9-40e7-b1c8-da165ee98c12@googlegroups.com> <8185ea95-cd36-462d-8a3b-d0109b7a970d@googlegroups.com> <eed0f57a-1a9c-4528-9259-e7525dccb1af@googlegroups.com> <ee2cb1c5-cd26-49ad-b070-a86e35b5be4f@googlegroups.com> <szi9moh828nm.199hpmrhszz6l$.dlg@40tude.net> |
tlvp wrote:
> On Thu, 13 Sep 2012 19:07:37 -0700 (PDT), luser- -droog wrote:
>
>> ... I've got to go
>> newsserver shopping again ...
>
> http://aioe.org/ ... news.eternal-september.org ... freenews.netfront.net
>
> There are others, too. HTH. Cheers, -- tlvp
Awesome! thnx. And eternal-september has its own calendrical system!
So I did some further reorganizing and added normal-visibility and
simplified the model->object transform. Even without lighting and color,
I think it looks pretty cool now.
625(1)04:49 PM:ps 1> cat 3d5.ps
%!
%Steinmertz, take 5: NEEDFORSPEED
(mat.ps)run
%/forall { pstack()= forall } bind def
%The horizontal chopping cylinder
/cylxz <<
/inside { % x y z . bool
exch pop
dup mul exch dup mul add R^2 le } bind
>> def
%The vertical chopping cylinder
/cylyz <<
/inside { % x y z . bool
dup mul exch dup mul add R^2 le
exch pop } bind
>> def
%Check that the vertices of a face
%are inside a specified chopping cylinder
/checkface { % [ v1 v2 v3 v4 ] dict
begin
{ aload pop inside } forall
4 copy eq 3 1 roll eq eq { % all-eq
pop pop pop
}{ % uneq in>=1 out>=1
pop pop pop %TODO: clipface
%pop false
} ifelse
end } bind def
%Write the vertex array [v1 v2 v3 v4]
%to outfile with embedded drawing command
/writeface {
out ([) writestring
[ v1 v2 v3 v4 ]{ % forall vertices
out ([) writestring
{ % forall coords of vertex
out exch outbuf cvs writestring
out ( ) writestring
} forall
out ( ) writestring
out (]) writestring
} forall
out (] drawface\n) writestring
out flushfile
} def
%Generate the faces of the Forward cylinder
%and eliminate faces outside the chopping cylinders
/steinmertz-gen { 20 dict begin
/N exch def
/R exch def
/R^2 R dup mul def
/h exch def
/dz 1 N div def
/dt 360 dz mul def
/hdz h dz mul def
0 dz 1 dz sub {
h mul h 2 div sub /z exch def
0 dt dup N 3 add mul { /t exch def
/v1 [ t cos R mul
t sin R mul
z ] def
/v4 [ t cos R mul
t sin R mul
z hdz add ] def
/t t dt add def
/v2 [ t cos R mul
t sin R mul
z ] def
/v3 [ t cos R mul
t sin R mul
z hdz add ] def
/face [ v1 v2 v3 v4 ] def
face cylxz checkface {
face cylyz checkface {
doface
} if
} if
} for
} for
end } bind def
%Action performed by steinmertz-gen
%on each face that survives the chopping
/doface {
usecache? {
writeface
}{
face drawface
} ifelse
} def
%This controls the parameters of the
%wireframe approximation of the cylinder
/genfaces {
% Generate the faces
%h R N
4 2 89 steinmertz-gen
} def
%Default modeling transform
/I3 3 ident def
/MO I3 def % model->object
/model {} def
/OW I3 def % object->world
/fill? true def
/wire? true def
/wirecolor
%{} def
{1 setgray} def
%Perform modeling transform
%Perform object->world transform
%Perform perspective projection
%Check visibility
%Fill if fill?
%Draw Outline if wire?
/drawface { DICT begin % [ v1 v2 v3 v4 ]
/face exch def
/action { moveto /action { lineto } def } def
face { % [ x y z ]
aload 4 1 roll model 4 3 roll astore
%MO matmul
dup OW matmul 0 get exch copy pop
} forall
{ %exitloop
face visible not { exit } if
face {
aload pop
proj %X Y
action
} forall
closepath
%set color
fill? { gsave fill grestore } if
wire? { gsave wirecolor stroke grestore } if
newpath
exit } loop
end } dup 0 2 dict put bind def
/E [ 0 0 10 ] def %eye point
/crackE { % set pointers into E
/ex E 0 1 getinterval cvx def
/ey E 1 1 getinterval cvx def
/ez E 2 1 getinterval cvx def
} def crackE
/E^ E dup [ exch mag neg dup dup ] { div } vop def %eye center vec
%Check visibility from the eye
/visible { % [ v1 v2 v3 v4 ] . bool
dup 0 get 1 index 1 get 2 index 3 get % [] v1 v2 v4
2 index { sub } vop % [] v1 v2 v14
3 1 roll exch { sub } vop % [] v14 v12
cross /normal exch def %normal ==
%/normal [ normal mag dup dup ] { div } vop def
dup 0 get E { sub } vop % [] ve1
/ev exch def %ev ==
ev normal dot %dup =
0 gt % [] bool
exch pop
} def
/proj { DICT begin /z exch def /y exch def /x exch def
1 ez z sub div
x ez mul z ex mul sub
1 index mul
y ez mul z ey mul sub
3 2 roll mul
end } dup 0 10 dict put bind def
/setuppage {
300 400 translate
1 90 dup dup scale div setlinewidth
} def
/usecache? true def
usecache? { % Generate Data File to cache the faces
/data (stein.fac) def
{
/in data (r) file def
} stopped {
clear
/out data (w) file def
/outbuf 128 string def
genfaces
flush out closefile
/out null def
/in data (r) file def
} if
/reopen { in closefile /in data (r) file def } def
/drawshape { in cvx exec reopen } def
}{ % Generate fresh data for each shape
/drawshape { genfaces } def
} ifelse
/up 90 rotx def
/left 90 roty def
/ang 0 def
{
/OW ang roty def
/ang ang 10 add def
setuppage
/model {} def % x y z -> x y z
%/MO I3 def
drawshape
/model { exch neg } def % x y z -> x z -y
%/MO up def
drawshape
/model { 3 1 roll exch neg } def % x y z -> z y -x
%/MO left def
drawshape
showpage
} loop
Back to comp.lang.postscript | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread
ping luser- -droog: SVG or PS project for you? tlvp <mPiOsUcB.EtLlLvEp@att.net> - 2012-07-17 04:48 -0400
Re: ping luser- -droog: SVG or PS project for you? luser- -droog <mijoryx@yahoo.com> - 2012-07-17 08:16 -0700
Re: ping luser- -droog: SVG or PS project for you? tlvp <mPiOsUcB.EtLlLvEp@att.net> - 2012-07-17 19:25 -0400
Re: ping luser- -droog: SVG or PS project for you? luser- -droog <mijoryx@yahoo.com> - 2012-08-17 23:40 -0700
Re: ping luser- -droog: SVG or PS project for you? luser- -droog <mijoryx@yahoo.com> - 2012-08-18 00:14 -0700
Re: ping luser- -droog: SVG or PS project for you? tlvp <mPiOsUcB.EtLlLvEp@att.net> - 2012-08-18 22:44 -0400
Moire Madness! Re: ping luser- -droog: SVG or PS project for you? luser- -droog <mijoryx@yahoo.com> - 2012-08-23 13:00 -0700
Re: Moire Madness! Re: ping luser- -droog: SVG or PS project for you? tlvp <mPiOsUcB.EtLlLvEp@att.net> - 2012-08-24 01:45 -0400
Re: Moire Madness! Re: ping luser- -droog: SVG or PS project for you? tlvp <mPiOsUcB.EtLlLvEp@att.net> - 2012-08-24 01:49 -0400
Re: Moire Madness! Re: ping luser- -droog: SVG or PS project for you? luser- -droog <mijoryx@yahoo.com> - 2012-08-23 23:11 -0700
Re: Moire Madness! Re: ping luser- -droog: SVG or PS project for you? luser- -droog <mijoryx@yahoo.com> - 2012-08-23 23:58 -0700
Re: Moire Madness! Re: ping luser- -droog: SVG or PS project for you? tlvp <mPiOsUcB.EtLlLvEp@att.net> - 2012-08-25 02:17 -0400
Re: Moire Madness! Re: ping luser- -droog: SVG or PS project for you? Luser droog <mijoryx@yahoo.com> - 2012-08-29 18:25 -0500
Re: Moire Madness! Re: ping luser- -droog: SVG or PS project for you? Luser droog <mijoryx@yahoo.com> - 2012-08-29 21:32 -0500
Re: Moire Madness! Re: ping luser- -droog: SVG or PS project for you? tlvp <mPiOsUcB.EtLlLvEp@att.net> - 2012-08-30 05:26 -0400
Hula-Hoop Hullaballoo! Re: ping luser- -droog: SVG or PS project for you? Luser droog <mijoryx@yahoo.com> - 2012-09-02 16:04 -0500
Re: Hula-Hoop Hullaballoo! Re: ping luser- -droog: SVG or PS project for you? Luser droog <mijoryx@yahoo.com> - 2012-09-03 12:29 -0500
Re: Hula-Hoop Hullaballoo! Re: ping luser- -droog: SVG or PS project for you? Luser droog <mijoryx@yahoo.com> - 2012-09-04 12:04 -0500
Re: Hula-Hoop Hullaballoo! Re: ping luser- -droog: SVG or PS project for you? "M. Joshua Ryan" <mijoryx@yahoo.com> - 2012-09-04 12:49 -0500
A shaded cylinder luser- -droog <mijoryx@yahoo.com> - 2012-09-04 18:11 -0700
Re: A shaded cylinder luser- -droog <mijoryx@yahoo.com> - 2012-09-11 13:03 -0700
Spinning Steinmertz Solid (approx.) luser- -droog <mijoryx@yahoo.com> - 2012-09-11 21:29 -0700
Mulligan (again) luser- -droog <mijoryx@yahoo.com> - 2012-09-13 19:07 -0700
Re: Mulligan (again) tlvp <mPiOsUcB.EtLlLvEp@att.net> - 2012-09-14 05:05 -0400
Heineken time "luser.droog" <luser.droog@gmail.com> - 2012-09-15 16:50 -0500
Bigger and Badderer "luser.droog" <luser.droog@gmail.com> - 2012-09-16 23:33 -0500
Re: Bigger and Badderer "luser.droog" <luser.droog@gmail.com> - 2012-09-16 23:37 -0500
QapplaH! "luser.droog" <luser.droog@gmail.com> - 2012-09-17 11:34 -0500
Re: QapplaH! (appendix: updated mat.ps) "luser.droog" <luser.droog@gmail.com> - 2012-09-17 13:05 -0500
one more cup of coffee for the road. "luser.droog" <luser.droog@gmail.com> - 2012-09-18 02:51 -0500
Re: Bigger and Badderer tlvp <mPiOsUcB.EtLlLvEp@att.net> - 2012-09-18 21:52 -0400
Re: Bigger and Badderer "luser.droog" <luser.droog@gmail.com> - 2012-09-18 22:30 -0500
Re: Bigger and Badderer tlvp <mPiOsUcB.EtLlLvEp@att.net> - 2012-09-19 00:59 -0400
Re: Bigger and Badderer "luser.droog" <luser.droog@gmail.com> - 2012-09-19 00:48 -0500
Revolving Camera prototype "luser.droog" <luser.droog@gmail.com> - 2012-09-23 22:30 -0500
Steinmetz with Revolving Camera "luser.droog" <luser.droog@gmail.com> - 2012-09-24 09:30 -0500
csiph-web