Esempio n. 1
0
 def toxy(v):
     return Vector3(v.x, v.y, 0)
Esempio n. 2
0
def drawwideline(p0, p1, w, color):
    f = (p0 - p1).cross(Vector3(0, 0, 1))
    f = f.normalize() if f.length() else Vector3(1, 0, 0)
    for d in (-w, 0, w):
        drawline(p0 + d * f, p1 + d * f, color)
Esempio n. 3
0
	def pickvector(self):
		self.uspin = Vector3(random.uniform(-1, 1), random.uniform(-1, 1), random.uniform(-1, 1))
		self.uspin = self.uspin.normalize() if self.uspin.length() else Vector3(0, 0, 1)
Esempio n. 4
0
def extractjoiner(jjoiner, joiner):
    jp0 = joiner["jp0"]
    jp1 = joiner["jp1"]
    p0 = pools[jp0]["pos"]
    p1 = pools[jp1]["pos"]
    w = joiner["w"]
    waypoints = list(joiner["waypoints"])
    jcurves = [True] + [r > 0 for p, r in waypoints] + [True]
    p0s = [p0] + [p for p, r in waypoints] + [p1]
    ps = [p0]
    curvedata = []
    iscurve = [False]
    for k, (p, r) in enumerate(waypoints):
        if r == 0:
            ps.append(p)
            iscurve.append(False)
        else:
            k0, k1, k2 = k, k + 1, k + 2
            while not jcurves[k0]:
                k0 -= 1
            while not jcurves[k2]:
                k2 += 1
            pA, pB, pC = Vector3(p0s[k0]), Vector3(p0s[k1]), Vector3(p0s[k2])
            f0 = pB - pA
            f1 = pC - pB
            f0.z = 0
            f1.z = 0
            if f0.length() == 0 or f1.length == 0:
                print("Error dumping joiner %d: %s, %d, %s" %
                      (jjoiner, joiner, k, p))
                return
            f0 = f0.normalize()
            f1 = f1.normalize()
            if abs(f0.dot(f1)) > 0.999:
                print("Error dumping joiner %d: %s, %d, %s" %
                      (jjoiner, joiner, k, p))
                return
            f = (f1 - f0).normalize()
            z = f1.cross(f0).normalize()
            beta = 1 / 2 * math.acos(f0.dot(f1))
            center = pB + f * r / math.cos(beta)
            ps.append(center - r * f.rotate(math.degrees(beta), z))
            ps.append(center - r * f.rotate(math.degrees(-beta), z))
            curvedata.append((center, beta, z.z > 0, r))
            iscurve.append(True)
            iscurve.append(False)
    ps.append(p1)
    cons = [("pool", jp0)] + [(jjoiner, k)
                              for k in range(len(ps) - 1)] + [("pool", jp1)]

    k = 0
    while len(ps) > 2:
        if ps[0][2] != ps[1][2]:
            yield totuple("slope", jjoiner, k, *cons[k], *cons[k + 2], *ps[0],
                          *ps[1], w)
        elif iscurve[k]:
            center, beta, right, r = curvedata[0]
            del curvedata[0]
            yield totuple("curve", jjoiner, k, *cons[k], *cons[k + 2], *ps[0],
                          *ps[1], w, *center, beta, right, r)
            k += 1
            del ps[0]
            yield totuple("straight", jjoiner, k, *cons[k], *cons[k + 2],
                          *ps[0], *ps[1], w)
        else:
            yield totuple("straight", jjoiner, k, *cons[k], *cons[k + 2],
                          *ps[0], *ps[1], w)
        del ps[0]
        k += 1


#		del waypoints[0]
    if len(ps) > 1:
        yield totuple("straight", jjoiner, k, *cons[k], *cons[k + 2], *ps[0],
                      *ps[1], w)
Esempio n. 5
0
File: app.py Progetto: gurb/melden
    def generate(self):
        self.shader = ShaderProgram("./shaders/vs.glsl", "./shaders/fs.glsl")
        self.shader.addUniform("screen_dim")
        self.shader.addUniform("mat_transform")
        self.shader.addUniform("mat_projection")
        self.shader.addUniform("mat_view")

        self.cubeShader = ShaderProgram("./shaders/cube_vs.glsl",
                                        "./shaders/cube_fs.glsl")
        self.cubeShader.addUniform("mat_transform")
        self.cubeShader.addUniform("mat_projection")
        self.cubeShader.addUniform("mat_view")

        self.lightShader = ShaderProgram("./shaders/light_vs.glsl",
                                         "./shaders/light_fs.glsl")
        self.lightShader.addUniform("mat_transform")
        self.lightShader.addUniform("mat_projection")
        self.lightShader.addUniform("mat_view")

        # ** every shader must be added list of shader called shaders
        self.shaders = [self.shader, self.cubeShader, self.lightShader]

        self.meshes = []

        self.renderer = Renderer(self.shaders)

        self.pos = glm.vec2(0, 0)
        self.angle = 0

        self.transform = glm.identity(glm.mat3x3)

        self.model = Mesh((-1.0, -0.0), (.3, .3), "./res/image.png")
        self.cube_model = Cube()
        self.light_model = Light()
        # self.light_model = Light(0.5)

        self.e = Entity(self.model, Vector3(0, 0, 0), Vector3(0.0, 0.0, 0.0),
                        Vector3(1, 1, 1))
        self.cube_entity = Entity(self.cube_model, Vector3(-1, -1, -1),
                                  Vector3(0.0, 0.0, 0.0), Vector3(1, 1, 1))
        self.light_entity = Entity(self.light_model, Vector3(-0.5, -0.5, -0.5),
                                   Vector3(0.0, 0.0, 0.0),
                                   Vector3(0.2, 0.2, 0.2))
        self.shadersDict = {
            self.e: [self.shader, False],
            self.cube_entity: [self.cubeShader, True],
            self.light_entity: [self.lightShader, True]
        }
        precision = 3
        self.cube_entities = []
        r = 3
        for i in range(10):
            x = round(uniform(-r, r), precision)
            y = round(uniform(-r, r), precision)
            z = round(uniform(-r, r), precision)
            self.cube_entities.append(
                Entity(self.cube_model, Vector3(x, y, z),
                       Vector3(0.0, 0.0, 0.0), Vector3(0.5, 0.5, 0.5)))
            self.shadersDict[self.cube_entities[i]] = [self.cubeShader, True]

        # self.cube_entities = Entity(self.cube_model, Vector3(0,0,0), Vector3(0.0,0.0,0.0), Vector3(1,1,1))

        self.camera = Camera()
Esempio n. 6
0
def main():
    "Executando o algoritmo"

    # --- BOIDS CONSTANTS --- #
    global f_cohesion, f_alignment, f_separation
    num_boids = 200
    f_cohesion = 0.0006
    f_alignment = 0.03
    f_separation = 0.01

    # Inicializando o pygame e configurando a exibição do OpenGL
    angle = 0.1  # ângulo de rotação da câmera
    ## side = 700
    side = 650  # tamanho da janela
    delay = 0  # time to delay each rotation, in ms
    xyratio = 1.0  # == xside / yside
    title = 'Python Boids'
    # random.seed(42)  # for repeatability

    # --- INICIALIZANDO TKINTER --- #
    master = Tk()
    w = 300
    h = 150
    ws = master.winfo_screenwidth()  # width of the screen
    hs = master.winfo_screenheight()  # height of the screen
    x = (ws / 2) - (w / 2) + 200
    y = (hs / 2) - (h / 2)
    master.geometry('%dx%d+%d+%d' % (w, h, x, y))
    master.protocol("WM_DELETE_WINDOW", quit_callback)
    master = Frame(master)
    master.pack()

    fontePadrao = ("Arial", "10")
    primeiroContainer = Frame(master)
    primeiroContainer["pady"] = 10
    primeiroContainer.pack()

    segundoContainer = Frame(master)
    segundoContainer["pady"] = 5
    segundoContainer["padx"] = 20
    segundoContainer.pack()

    terceiroContainer = Frame(master)
    terceiroContainer["pady"] = 5
    terceiroContainer["padx"] = 20
    terceiroContainer.pack()

    quartoContainer = Frame(master)
    quartoContainer["pady"] = 5
    quartoContainer["padx"] = 20
    quartoContainer.pack()

    titulo = Label(primeiroContainer, text="Boids Constants")
    titulo["font"] = ("Arial", "10", "bold")
    titulo.pack()

    nomeLabel = Label(segundoContainer,
                      text="(1-2) Cohesion: ",
                      font=fontePadrao)
    nomeLabel.pack(side=LEFT)
    cohesion_entry = Entry(segundoContainer, justify=CENTER)
    cohesion_entry["font"] = fontePadrao
    cohesion_entry.insert(0, str(f_cohesion))
    cohesion_entry.pack(side=LEFT)

    nomeLabel = Label(terceiroContainer,
                      text="(3-4) Alignment: ",
                      font=fontePadrao)
    nomeLabel.pack(side=LEFT)
    alignment_entry = Entry(terceiroContainer, justify=CENTER)
    alignment_entry["font"] = fontePadrao
    alignment_entry.insert(0, str(f_alignment))
    alignment_entry.pack(side=LEFT)

    nomeLabel = Label(quartoContainer,
                      text="(5-6) Separation: ",
                      font=fontePadrao)
    nomeLabel.pack(side=LEFT)
    separation_entry = Entry(quartoContainer, justify=CENTER)
    separation_entry["font"] = fontePadrao
    separation_entry.insert(0, str(f_separation))
    separation_entry.pack(side=LEFT)

    # Inicializando o pygame
    pygame.init()
    pygame.display.set_caption(title, title)
    pygame.display.set_mode((side, side), pyg.OPENGL | pyg.DOUBLEBUF)

    # Inicializando o OpenGL no pygame
    gl.glEnable(gl.GL_DEPTH_TEST)  # use our zbuffer
    gl.glClearColor(0, 0, 0, 0)
    # Configurando o espaço tridimensional
    gl.glMatrixMode(gl.GL_PROJECTION)
    gl.glLoadIdentity()
    # glu.gluPerspective(60.0, xyratio, 1.0, 250.0)   # setup lens
    ## edge = 40.0
    edge = 50.0  # aresta do cubo
    glu.gluPerspective(60.0, xyratio, 1.0, (6 * edge) + 10)  # setup lens
    gl.glMatrixMode(gl.GL_MODELVIEW)
    gl.glLoadIdentity()
    # glu.gluLookAt(0.0, 0.0, 150, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0)
    glu.gluLookAt(0.0, 0.0, 3 * edge, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0)
    gl.glPointSize(3.0)
    cube0 = Vector3(-edge, -edge, -edge)  # cube min vertex
    cube1 = Vector3(+edge, +edge, +edge)  # cube max vertex

    # --- Inicializando os boids e o cubo --- #
    theflock = flock(num_boids, cube0, cube1)

    while True:
        event = pygame.event.poll()
        if event.type == pyg.QUIT or (event.type == pyg.KEYDOWN and
                                      (event.key == pyg.K_ESCAPE
                                       or event.key == pyg.K_q)):
            break
        if (event.type == pygame.KEYDOWN):
            # ALTERANDO COESÃO
            if (event.key == pygame.K_1):
                f_cohesion -= 0.0001
                cohesion_entry.delete(0, END)
                cohesion_entry.insert(0, str(round(f_cohesion, 6)))
            if (event.key == pygame.K_2):
                f_cohesion += 0.0001
                cohesion_entry.delete(0, END)
                cohesion_entry.insert(0, str(round(f_cohesion, 6)))
            # ALTERANDO ALINHAMENTO
            if (event.key == pygame.K_3):
                f_alignment -= 0.01
                alignment_entry.delete(0, END)
                alignment_entry.insert(0, str(round(f_alignment, 6)))
            if (event.key == pygame.K_4):
                f_alignment += 0.01
                alignment_entry.delete(0, END)
                alignment_entry.insert(0, str(round(f_alignment, 6)))
            # ALTERANDO SEPARAÇÃO
            if (event.key == pygame.K_5):
                f_separation -= 0.01
                separation_entry.delete(0, END)
                separation_entry.insert(0, str(round(f_separation, 6)))
            if (event.key == pygame.K_6):
                f_separation += 0.01
                separation_entry.delete(0, END)
                separation_entry.insert(0, str(round(f_separation, 6)))
        gl.glClear(gl.GL_COLOR_BUFFER_BIT | gl.GL_DEPTH_BUFFER_BIT)

        # Renderizando o cubo e os boids
        theflock.render()

        gl.glRotatef(angle, 0, 1, 0)  # rotacionando a tela no eixo y

        pygame.display.flip()

        if delay > 0:
            pygame.time.wait(delay)

        # Atualizando a posição dos boids
        theflock.update()

        try:
            master.update()
        except:
            print("dialog error")

    master.destroy()
Esempio n. 7
0
 def __init__(self, position, direction):
     self.pos = Vector3(position)
     self.rot = Vector3(direction).normalize()
Esempio n. 8
0
 def __init__(self):
     self.vitesse = 1000
     self.taille = 6
     self.position = Vector2()
     self.direction = Vector2()
     self.couleur = Vector3()
Esempio n. 9
0
 def __init__(self, position, direction, color=(0, 0, 0)):
     super().__init__(position, direction)
     self.color = Vector3(color)
     self.radius = 0
Esempio n. 10
0
 def global_light_color(self, ray, distance, source):
     return [
         int(i / 2 + .5) for i in (
             Vector3(self.color) *
             max((-self.ray_normal(ray, distance) * source + 1), 0.25))
     ]
Esempio n. 11
0
# Vector con todos los posibles valores de un puente, el primer valor será el de por defecto
puente = [0] + puente_horizontal + puente_vertical

# Número de pixeles que ocupará el texto
TAMA_TEXTO = 30
# Número de pixeles que tendrá cada puente
TAMA_PUENTE = TAMA_TEXTO * 3

# Colores de las superficies
FONDO = (240, 240, 240)  # color del fondo
NODOS = (255, 255, 255)  # color para el centro de un nodo
NUMEROS = (0, 0, 0
           )  # color para los valores de los nodos y el borde de los nodos
PUENTES = (0, 0, 0)  # color de los puentes
PUENTES_FONDO = Vector3(PUENTES).lerp(
    Vector3(FONDO), 0.7)  # color especial para puentes por defecto
MARCADO = (255, 0, 0)  # color del borde en los nodos marcados
VISITADO = (255, 128, 0)
COMPLETADO = (0, 128, 0)

ESPACIO = 5  # espacio entre los nodos y el borde exterior


def dibujar_texto(surface,
                  texto,
                  pos,
                  color=(0, 0, 0),
                  fuente='Comic Sans MS'):
    '''
Mostrar texto en pantalla
    :param surface: superficie sobre la que se dibujará
Esempio n. 12
0
 def project(self, vector, win_width, win_height, fov, viewer_distance):
     factor = fov / (viewer_distance + vector.z)
     x = vector.x * factor + win_width / 2
     y = -vector.y * factor + win_height / 2
     return Vector3(x, y, vector.z)
Esempio n. 13
0
                 points[face[3]].z) / 4.0
            avg_z.append([i, z])

        return avg_z

    def create_polygon(self, face, transformed_vectors):
        return [(int(transformed_vectors[f].x), int(transformed_vectors[f].y))
                for f in face]


pygame.init()

screen = pygame.display.set_mode((400, 600))

cube = Cube([
    Vector3(-1, 1, -1),
    Vector3(1, 1, -1),
    Vector3(1, -1, -1),
    Vector3(-1, -1, -1),
    Vector3(-1, 1, 1),
    Vector3(1, 1, 1),
    Vector3(1, -1, 1),
    Vector3(-1, -1, 1)
], screen.get_width(), screen.get_height())

running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
Esempio n. 14
0
import random
import pygame
import time
import numpy as np
from pygame.math import Vector2, Vector3
from find_hand import FindHand

hand = FindHand()
pygame.init()

FONT = pygame.font.SysFont('Helvetica', 25)
FPS = 30
WIN_WIDTH = 1538
WIN_HEIGHT = 834
WIN_DEPTH = int(WIN_WIDTH * 1.5)
WIN_CENTER = Vector3(WIN_WIDTH // 2, WIN_HEIGHT // 2, WIN_DEPTH // 2)
DEPTH_RATIO = 1 / 4
BACK_WIN_WIDTH = int(WIN_WIDTH * DEPTH_RATIO)
BACK_WIN_HEIGHT = int(WIN_HEIGHT * DEPTH_RATIO)
MAX_SCORE = 3
DISPLAY = (WIN_WIDTH, WIN_HEIGHT)
BLACK = (0, 0, 0)
WHITE = (255, 255, 255)
GRAY = (160, 160, 160)
RED = (255, 0, 0)
GREEN = (0, 200, 0)

# Points connecting lines in background
POINT_1 = [0, 0]
POINT_2 = [WIN_WIDTH, 0]
POINT_3 = [0, WIN_HEIGHT]
Esempio n. 15
0
if the_args[0].upper() == 'SCENE':
    print("scene mode")
    scene_f = the_args[1]
    sr = scene_reader.SceneReader(scene_f, WINDOW_MODE)
    sys.exit(0)

# this is dead code
assert 1 == 0

sinw = lambda: sin_wave_generator(mul=60, speed=1, baseline=0.5)

halfer = lambda x: list(a / 2 for a in x)

gene = lambda x: default_number_generator(x)
v2tov3 = lambda x: Vector3(x[0], x[1], 0)

GRAY = (30, 30, 30)
SCREEN_SIZE = (1200, 900)
TRIANGLE_SIZE = (700, int(700 / 1.622))
TRIANGLE_SIZE_2 = (400, 400)
GRID_SIZE = (150, 200)
SQUARE_SIZE = (200, 200)

# positions
TOP_LEFT = (0, 0)
TOP_RIGHT = (SCREEN_SIZE[0], 0)
TOP_MIDDLE = (SCREEN_SIZE[0] / 2, 0)
MIDDLE_LEFT = (0, SCREEN_SIZE[1] / 2)
MIDDLE_RIGHT = (SCREEN_SIZE[0] / 2, SCREEN_SIZE[1] / 2)
MIDDLE_MIDDLE = (SCREEN_SIZE[0] / 2, SCREEN_SIZE[1] / 2)
Esempio n. 16
0
def think(dt, dmx, dmy):
	self.tosnap = max(self.tosnap - dt, 0)

	if settings.manualcamera:
		self.mgamma = math.clamp(self.mgamma - 100 * dmy, 5, 85)
		self.mphi -= 100 * dmx

	camera = 1 * state.you.pos
	atilt = state.you.section.atilt(state.you)
	Rvantage = 20
	gamma = 55 - state.you.drainangle()
	phi = -math.degrees(state.you.heading)

	if state.you.section.fmode is None:
		pass
	elif state.you.section.fmode:
		if not self.fmode:
			self.fmode = True
			self.tosnap = 1
	else:
		if self.fmode:
			self.fmode = False
			self.tosnap = 1

	if state.you.section.bmode is None:
		pass
	elif state.you.section.bmode:
		if not self.bmode:
			self.bmode = True
			self.tosnap = 1
	else:
		if self.bmode:
			self.bmode = False
			self.tosnap = 0.5

	if self.fmode:
#		if state.you.section.label == "pool":
		self.fcamera = state.you.section.pos * 1
		camera = math.softapproach(self.camera, self.fcamera, 2 * dt)
		phi = 0
		gamma = 40
		Rvantage = math.softapproach(self.Rvantage, 28, 3 * dt)

	if self.bmode:
		camera = math.softapproach(self.camera, state.you.section.pos, 1 * dt)
		d = state.you.pos - state.you.section.pos
		d.z = 0
		
		if d.x == 0 and d.y == 0:
			kappa = 0
		else:
			kappa = math.degrees(math.atan2(d.y, d.x)) - 90
		dphi = math.zmod(self.bphi - kappa, 360)
		if 0 < dphi < 70:
			self.bphi += 70 - dphi
		elif -70 < dphi < 0:
			self.bphi += -70 - dphi
		phi = self.bphi
		gamma = 55
		Rvantage = math.softapproach(self.Rvantage, 45, 3 * dt)

	if state.you.section.rapid > 1:
		if not self.rapid:
			self.tosnap = 1
			self.rapid = True
		Rvantage = 12
		gamma = 68
	else:
		if self.rapid:
			self.tosnap = 1
			self.rapid = False

	# f is approximately dt / self.tosnap for large values of self.tosnap
	# rapidly approaches 1 as self.tosnap goes to 0
	fsnap = 1 - math.exp(-dt / self.tosnap) if self.tosnap > 0 else 1

	if settings.manualcamera:
		gamma = self.mgamma
		phi = self.mphi

	self.gamma = math.mix(self.gamma, gamma, fsnap)
	self.phi += fsnap * math.zmod(phi - self.phi, 360)
	if fsnap == 0:
		self.phi = phi
	self.Rvantage = math.mix(self.Rvantage, Rvantage, fsnap)
	self.atilt = math.mix(self.atilt, atilt, 2 * dt)
	
	if not settings.manualcamera:
		self.mgamma = self.gamma
		self.mphi = self.phi

	theta = self.gamma
	uvantage = Vector3(0, 0, 1).rotate_x(theta).rotate_z(self.phi)
	
	dtilt = self.atilt.length()
	utilt = self.atilt.normalize() if dtilt else Vector3(0, 0, 1)
	self.camera = camera
	self.vantage = self.camera + self.Rvantage * uvantage.rotate(dtilt, utilt)
	self.up = Vector3(0, 0, 1).rotate_z(self.phi).rotate(dtilt, utilt)
Esempio n. 17
0
def researcher():
    step = +0.0001
    start = 0
    while True:
        yield Vector3(math.pi / 6, 0, 0)
        start -= step
Esempio n. 18
0
            self.img,
            (self.pos[0] - self.img.get_width() / 2,
             self.pos[1] - self.img.get_height() - self.pos[2]),
        )


levels = []
for i in range(1, 6):
    levels.append(pygame.image.load("level%i.png" % i).convert())
nlevel = 0
level = levels[0]

red = Bubble("red.png", "smile")
blue = Bubble("blue.png", "frown")

red.pos = Vector3(100, HEIGHT / 2, 0)
blue.pos = Vector3(WIDTH - 100, HEIGHT / 2, 0)
red.vel = Vector3(0, 0, 0)
blue.vel = Vector3(0, 0, 0)

bubbles = [red, blue]
pills = []

font = pygame.font.Font("Apercu-Bold.otf", 40)
#font = pygame.font.SysFont("monospace", 20)

pygame.joystick.init()

joysticks = [
    pygame.joystick.Joystick(x) for x in range(pygame.joystick.get_count())
]
Esempio n. 19
0
 def atilt(self, you):
     return Vector3(0, 0, 0)
Esempio n. 20
0
def random_Vector3(lower=0.0, upper=1.0):
    "return a Vector3 with random elements between lower and upper"
    return Vector3(random_range(lower, upper), random_range(lower, upper),
                   random_range(lower, upper))
Esempio n. 21
0
PS this entire program is a nightmare.
"""

from __future__ import division
import sys, pygame, math, json, os, sys, random
from pygame.locals import *
from pygame.math import Vector2, Vector3
from . import ptext

fname = sys.argv[1]

savefile = "/tmp/%s.json" % fname
dumpfile = "/tmp/%s.csv" % fname

zoom = 1
p0 = Vector3(0, 0, 0)

# ISO convention https://en.wikipedia.org/wiki/Spherical_coordinate_system
theta = 1
phi = 0

screenw, screenh = 1024, 720
screen = pygame.display.set_mode((screenw, screenh))


# previous value  within sorted list vs less than v
def pvalue(vs, v, wrap=True):
    xs = [x for x in vs if x < v]
    return xs[-1] if xs else vs[-1 if wrap else 0]

Esempio n. 22
0
 def __init__(self):
     "initialize the correction base class"
     self.delta = Vector3(0.0, 0.0, 0.0)  # velocity correction
     self.num = 0  # number of participants
     self.neighborhood = 5.0  # area for this correction
Esempio n. 23
0
    def __init__(self):
        self.size = 10

        self.couleur = Vector3()
        self.direction = Vector2()
        self.position = Vector2()