Programmera 3D-grafik i Debian Linux/Ubuntu med Visual Python

Får jag välja mellan C++ och Python så väljer jag Python alla dagar i veckan. Snygg syntax, lätt att komma igång, väldigt objektorienterat, lätt att komma ihåg kommandon, god tillgång på drivrutiner och enkelt att flytta mellan Linux, Windows, Raspberry och t.o.m Mac.

Har skrivit en liten exempelkod som simulerar en 6-cylindrig motor (med en märklig vevaxel). Varje cylinder är ett objekt som är skapat av klassen Cylinder.

1. Starta ett terminalfönster, Ctrl-Alt-T.
2. Skapa ett arbetsbibliotek ”mkdir motor”. Du kan markera och kopiera commandot med Ctrl-C. I terminalfönstret klistrar du in med Shift-Ctrl-V.
3. Gå till arbetsbiblioteket ”cd motor”.
4. Ladda ner Python ”sudo apt-get install python”.
5. Installera Idle ”sudo apt-get install idle”.
6. Installera Vpython ”sudo apt-get install python-visual”
och ”sudo apt-get install libgtkglextmm-x11-1.2-dev”
7. Starta Idle ”idle”.
8. Skapa en ny fil med Ctrl-N, klistra in nedanstående kod. Var noga med indragningarna i vänsterkanten eftersom de har en viktig funktion i Python.

# -*- coding: utf-8 -*-
#Just for fun: SixPistonMotor.py
from visual import *

scene.width=1200
scene.height=600
scene.background=(0.5,0.5,0.5)

class classCylinder:
    iNoOfCylinders = 0
    iRodlength = 100

    def __init__(self, zPos):
        self.cylinderFlywheel = cylinder(pos=vector(0,0,zPos), axis=vector(50,0,0), radius=10, color=color.yellow, opacity=0.5)
        self.cylinderPiston = cylinder(pos=vector(0,100,zPos), axis=vector(0,35,0), radius=20, color=color.red)
        self.cylinderRod = cylinder(pos=vector(50,0,zPos), axis=vector(0,classCylinder.iRodlength,0), radius=5, color=color.green)
        classCylinder.iNoOfCylinders += 1

    def writeCylinder(self, iAngle):
        self.cylinderFlywheel.axis.x = 50*cos(radians(iAngle))
        self.cylinderFlywheel.axis.y = 50*sin(radians(iAngle))
        self.cylinderRod.pos = self.cylinderFlywheel.pos + self.cylinderFlywheel.axis
        self.cylinderRod.axis.x = -self.cylinderFlywheel.axis.x
        self.cylinderRod.axis.y = sqrt(classCylinder.iRodlength*classCylinder.iRodlength - self.cylinderFlywheel.axis.x*self.cylinderFlywheel.axis.x)
        self.cylinderPiston.pos = self.cylinderRod.pos+self.cylinderRod.axis

cylinderConnectingRod = cylinder(pos=vector(0,0,0), axis=vector(0,0,250), radius=5, color=color.green)
listCylinders = [classCylinder(0), classCylinder(50), classCylinder(100), classCylinder(150), classCylinder(200), classCylinder(250)]
 
for iRotations in range(0, 100):
    for iAngle in range(0, 360):
        rate(200) #Increase for higher RPM
        for iCylinder in range(0, 6):
            listCylinders[iCylinder].writeCylinder(iAngle + iCylinder*30)

9. Tryck på Ctrl-S och spara som SixPistonMotor.py.
10. Starta programmet med F5.
11. Använd höger musknapp för att rotera.
12. Använd båda musknapparna för att zooma.

6piston   images_products_multipath_python-logo-3