Dienstag, 27. April 2010

Python 046 Artifical Life :)


The eyes move from left to right and back.
And the arm are waving around. (at least in my version)

#artifical intelligence
#shiranutachi = an other form of live :)

from visual import *
import numpy as np
import time
from random import randint

N = 7 #number of shiranu
size = 3*N
Shiranu = []
leg1 = []
leg2 = []
arm1 = []
arm2 = []
eye1 = []
eye2 = []
eye1black = []
eye2black = []
arm1angle = []
arm2angle = []
xx = []
yy = []
zz = []
scene.center = (size/2.0, 0, size/2.0)

colors = [color.green, color.yellow, color.blue, color.red]

#instantiation
for i in range(N):
x = random.randint(0, size)
y = 0
z = random.randint(0, size)
print (x,y)
Shiranu = Shiranu + [sphere(pos=(x,y,z), radius=1, color=colors[i % 4])]
leg1 = leg1 + [curve(pos=[(x-0.5,y,z),(x-0.5,y-1.6,z)], color=colors[i % 4], radius=0.1)]
leg2 = leg2 + [curve(pos=[(x+0.5,y,z),(x+0.5,y-1.6,z)], color=colors[i % 4], radius=0.1)]
arm1 = arm1 + [curve(pos=[(x-0.95,y,z),(x-1.5,y+0.6,z)], color=colors[i % 4], radius=0.1)]
arm2 = arm2 + [curve(pos=[(x+0.95,y,z),(x+1.5,y+0.6,z)], color=colors[i % 4], radius=0.1)]
eye1 = eye1 + [sphere(pos=(x-0.40,y+0.1,z+0.67), radius=0.3, color=color.white)]
eye2 = eye2 + [sphere(pos=(x+0.40,y+0.1,z+0.67), radius=0.3, color=color.white)]
eye1black = eye1black + [sphere(pos=(x-0.45,y+0.1,z+0.90), radius=0.1, color=color.black)]
eye2black = eye2black + [sphere(pos=(x+0.45,y+0.1,z+0.90), radius=0.1, color=color.black)]
xx = xx + [x]
yy = yy + [y]
zz = zz + [z]

#motion
t = 0
dt = 0.1 #better not change
while t<3000:
t += dt
#todo: armmovement isnt ready
if t % 3.1415 > 2.0:
arm1angle = radians(t)
if t % 3.1415 < 1.0:
arm1angle = radians(-t)
else:
pass
print arm1angle
for i in range(N):
eye1black[i].pos.x = eye1black[i].pos.x + cos(t+i/1)/180 #this is for eye-movement
eye2black[i].pos.x = eye2black[i].pos.x + cos(t+i/1)/180
#todo: armmovement isnt ready
arm1[i].pos[0] = (xx[i]-0.95,yy[i],zz[i])
arm1[i].pos[1] = (xx[i]-0.95+cos(arm1angle)*1, yy[i]+sin(arm1angle)*1, zz[i])
if 200 > degrees(arm1angle) > 90:
pass
else:
arm2[i].pos[0] = (xx[i]+0.95,yy[i],zz[i])
arm2[i].pos[1] = (xx[i]+0.95+cos(arm1angle)*1, yy[i]+sin(arm1angle)*1, zz[i])
time.sleep(0.001)

Samstag, 24. April 2010

Python 045 Lorentz force



import time
from visual import *
# lorentzkraft

scene.title="..."
scene.width=600
scene.height=600
scene.autoscale = 0
scene.forward = (-1,-.5,-1)
R = 0.1

avector = [2,1,2]
bvector = [1,0,0]
cvector = cross(avector,bvector)

a = arrow(pos=(0,0,0), axis=avector, shaftwidth=R, color=color.white)
b = arrow(pos=(0,0,0), axis=bvector, shaftwidth=R, color=crayola.green)
c = arrow(pos=(0,0,0), axis=cvector, shaftwidth=R, color=crayola.yellow)

alabel=label(pos=avector, text="dl", yoffset=-5, opacity=0, box=0, line=0)
blabel=label(pos=bvector, text="B", yoffset=-5, opacity=0, box=0, line=0)
clabel=label(pos=cvector, text="F", yoffset=-5, opacity=0, box=0, line=0)

line1 = sphere(radius=0.01)
line1.trail = curve()
line2 = sphere(radius=0.01)
line2.trail = curve()

size = .1
for n in range(3000):
avectorold = avector
cvectorold = cvector

avector[0] = sin(n/10.0*size)
a.axis.x = avector[0]
avector[1] = sin(n/10.0*size*1.83)
a.axis.y = avector[1]
avector[2] = sin(n/10.0*size*1.33)
a.axis.z = avector[2]

cvector = cross(avector,bvector)
c.axis = cvector

#LABEL
alabel.pos = avector
blabel.pos = bvector
clabel.pos = cvector
alabel.text = "dl: " + str(avector)
blabel.text = "B: " + str(bvector)
clabel.text = "F: " + str(cvector)

#TRAIL
line1.trail.append(pos=avector)
line2.trail.append(pos=cvector, color=color.yellow)
time.sleep(0.1)

Python 044 Charges





#coulomb force 2-dimensional
#visualised with vpython-spheres
#strongest field = color red
#lowest field = color blue

from visual import sphere, scene
from numpy import log
scene.center = (25,25,0)

charge = [ #posx, posy, charge
[20.01, 20.01, 1],
#[15, 0.01, -3],
[20.01, 25.21, -1]
]

#compute the field strength
const = 8.988*10**9 #Vm/As
def field(posxtest,posytest,posx,posy,charge):
dx = abs(posxtest-posx)
dy = abs(posytest-posy)
r = (dx**2+dy**2)**(0.5)
E = const * charge / r
return E

posxtest = range(1,70)
posytest = range(1,40)

for x in posxtest:
for y in posytest:
e = 0
for elem in charge: #ok
e += field(x,y,elem[0],elem[1],elem[2])
colorfactor = 2000000000
#print e/colorfactor
ball = sphere(pos=[x,y],radius=0.7)
if e >= 0:
ball.color = [(e/colorfactor),0,0]
if e < 0:
ball.color = [0,0,(abs(e/colorfactor))]
 
eXTReMe Tracker