#!/usr/bin/perl

# Eine Transformkanone:
#
# Ich stimme mit Rudolf Zengerle überein, daß sie eine Spirale
# um den Lauf haben sollte, weil das schaut cool aus.
# Der Rest gefällt mir aber nicht so, den mache ich anders:
# Der eigentliche Lauf besteht aus fünf Stäben mit einem Ring
# vornedrauf.
# Das ganze ist auf einer großen Kugel montiert, die Magazin,
# Energieanlagen und Platz für einen menschlichen Gunner enthält.
# Kugel deswegen, weil sich die in jeder Lage montieren läßt.

# 1: Keine Spirale:
# 2: Spirale nur aus Cones zusammengesetzt
# 3: Lücken mit Kugeln aufgefüllt
$detail = 3;

# Lauf:
print "#declare TFK_Lauf = \n";
print "\tunion {\n";

# Führungsstäbe Lauf:
$rlauf = 5;
$rfs = 2;

$pi = atan2(1, 1) * 4;
for ($a = 0; $a < 2*$pi; $a += 2*$pi/5) {
    $x = sin($a) * $rlauf;
    $y = cos($a) * $rlauf;
    print "\t\tcone {<$x, $y, 0>, $rfs, <$x, $y, 50>, $rfs\n";
    print "\t\t\ttexture {\n";
    print "\t\t\t\tpigment {color <0.7, 0.7, 1.0>}\n";
    print "\t\t\t\tfinish {phong 1.0 metallic}\n";
    print "\t\t\t}\n";
    print "\t\t}\n";
} 

# Spirale Lauf:

if ($detail > 1) {
    $step = 2*$pi/30;
    for ($a = 0, $n = 0; $a < 55; $a += $step, $n++) {
        $x1 = sin($a-$step) * ($rlauf + $rfs);
        $y1 = cos($a-$step) * ($rlauf + $rfs);
        $x2 = sin($a) * ($rlauf + $rfs);
        $y2 = cos($a) * ($rlauf + $rfs);
        if ($n % 2) {
            $color = "<1, 0, 0>"
        } else {
            $color = "<1, 1, 0>"
        }
        print "\t\tcone {\n";
        print "\t\t\t<$x1, $y1, $a-$step>, 1, <$x2, $y2, $a>, 1\n";
        print "\t\t\ttexture {pigment {color $color}\n";
        print "\t\t\t\tfinish {phong 1.0}\n";
        print "\t\t\t}\n";
        print "\t\t}\n";
        if ($detail > 2) {
            print "\t\tsphere {\n";
            print "\t\t\t<$x2, $y2, $a>, 1\n";
            print "\t\t\ttexture {pigment {color $color}}\n";
            print "\t\t}\n";
        }
    }
}

# Abstrahlring Lauf:

print "\t\tdifference {\n";
print "\t\t\tunion {\n";
print "\t\t\t\tcone {<0, 0, 50>, ($rlauf + $rfs), <0, 0, 55>, ($rlauf + 2.5*$rfs)}\n";
print "\t\t\t\tcone {<0, 0, 65>, ($rlauf + $rfs), <0, 0, 55>, ($rlauf + 2.5*$rfs)}\n";
print "\t\t\t}\n";
print "\t\t\tcone {<0, 0, 49>, ($rlauf - $rfs), <0, 0, 66>, ($rlauf - $rfs)}\n";
print "\t\t\ttexture {\n";
print "\t\t\t\tpigment {color <0.7, 0.7, 1.0>}\n";
print "\t\t\t\tfinish {phong 1.0}\n";
print "\t\t\t}\n";
print "\t\t}\n";
print "\t}\n";




print "#declare TFK = \n";
print "\tunion {\n";
# Kugel:
print "\t\tsphere { <0, 0, 0>, 25\n";
print "\t\t\ttexture {\n";
print "\t\t\t\tpigment {color <0.7, 0.7, 1.0>}\n";
print "\t\t\t\tfinish {phong 1.0}\n";
print "\t\t\t}\n";
print "\t\t}\n";
print "\t\tobject {TFK_Lauf translate <-($rlauf+3*$rfs), 0, 0>}\n";
print "\t\tobject {TFK_Lauf translate <+($rlauf+3*$rfs), 0, 0>}\n";
print "\t\tcone { <0, 11, 13>, 1, <0, 11, 16>, 2\n";
print "\t\t\ttexture {\n";
print "\t\t\t\tpigment {color <0.1, 0.1, 0.2>}\n";
print "\t\t\t\tfinish {phong 1.0 metallic}\n";
print "\t\t\t}\n";
print "\t\t}\n";
print "\t}\n";

