chiark / gitweb /
poster-tube-lid-parametric: wip
[reprap-play.git] / poster-tube-lid-parametric.pl
1 #!/usr/bin/perl -w
2 use strict;
3
4 use Math::Vector::Real;
5
6 my $lin_len = 10;
7 my $sine_len = 8;
8 my $sine_height = 6;
9
10 my @i_sections = qw(ball0   6
11                     sine0  10
12                     lin0    2
13                     circle 20
14                     lin1    2
15                     sine1  10
16                     lin2    2
17                     ball2   6);
18
19 sub point ($$) {
20     my ($ip,$it, $jp,$jt) = @_;
21
22     my ($i_offset, $i_outward);
23
24     $i_outward = V( 0,
25                   ($ip =~ m/0$/ ? -1 : +1),
26                   0 );
27
28     if ($ip =~ m/^lin[01]$/) {
29         $i_offset = V( $lin_len * ($ip =~ m/1/ ? $it : 1-$it),
30                        0,
31                        0 );
32     } elsif ($ip =~ m/^circle$/) {
33         $i_offset = V( 0,0,0 );
34         $i_outward = V(  sin($ip / PI),
35                          -cos($ip / PI),
36                          0 );
37     } elsif ($ip =~ m/^lin2$/) {
38         $i_offset = V( -$lin_len -$sine_len,
39                        0,
40                        +1 );
41     } elsif ($ip =~ m/^sine[01]$/) {
42         $i_offset = V( -$lin_len -$it*$sine_len,
43                        0,
44                        $sine_height * ( 0.5 - 0.5*cos( $it*PI ) )
45                      );
46     } else {
47         die "$ip ?";
48     }
49