Editar Nuevo Proyecto: Tarea 10 Montserrat Salvadó No tienes permiso para modificar esta página, por el siguiente motivo: La acción que has solicitado está restringida a los usuarios del grupo: Usuarios. Título: Imagen: Subir archivo Tipo de Proyecto: Proyecto de Taller Proyecto de Curso Proyecto de Tutoría Proyecto de Titulación Proyecto de Posgrado Proyecto Extracurricular Proyecto Propio Proyecto de Pregrado Anteproyecto de Titulación Proyecto de Financiamiento Externo o Fondo Concursable Importante: Si se trata de un proyecto de Investigación, hay que cambiar el tipo de plantilla editando directamente el código de esta página. Para esto hay un link en la cabecera EDITAR CÓDIGO. Desde cambiar de {{Proyecto}} a {{Proyecto de Investigación}} porque éstos tienen otros campos y particularidades especiales. Palabras Clave: todo en bajas, separadas por coma Año de Inicio: Año de Término: Carreras Relacionadas: Arquitectura Diseño Magíster Otra Asignaturas Relacionadas: Taller Inicial 1ª y 2ª Etapa Cursos Relacionados: Imagen Escrita 2012 Profesor: Herbert Spencer Alumnos: Montserrat Salvadó PDF: URL: Posición: Calcular coordenadas utilizando la dirección Texto libre: // Attraction // Daniel Shiffman <http://www.shiffman.net> // Demonstrates attractive force one body exerts on a group of bodies stored in an array // G ---> universal gravitational constant // m1 --> mass of object #1 // m2 --> mass of object #2 // d ---> distance between objects // F = (G*m1*m2)/(d*d) // Click and drag attractive body to move throughout space // Keypress turns on and off vector display int MAX = 50; Thing[] t = new Thing[MAX]; Attractor a; boolean showVectors = false; boolean velo = false; void setup() { size(1000, 650); smooth(); // Some random bodies for (int i = 0; i < t.length; i++) { PVector ac = new PVector(0.0, 0.0); PVector ve = new PVector(random(-1, 1), random(-1, 1)); PVector lo = new PVector(random(width), random(height)); t[i] = new Thing(ac, ve, lo, random(2, 100)); } // Create an attractive body a = new Attractor(new PVector(width/2, height/2), 20, 1.8); PFont font; font = createFont("Monaco", 89); textFont(font); } color cualquiera() { color c = color(random(845), random(987), random(434)); return c; } void draw() { if (!velo)background(600); // fondo blanco a.rollover(mouseX, mouseY); // "escucha" al mouse para saber si hay rollover sobre el atractor a.go(); // * atractor: sea! for (int i = 0; i < t.length; i++) { // Calculate a force exerted by "attractor" on "thing" PVector f = a.calcGravForce(t[i]); // Apply that force to the thing t[i].applyForce(f); // Update and render t[i].go(); } if (keyPressed) { if (key == 'a') { a.G += 0.1; } if (key == 'z') { a.G -= 0.1; } if (key == 's') { a.mass += 5; } if (key == 'x') { a.mass -= 20; a.mass = constrain(a.mass, 0, 100); } } fill(0); text("G = "+a.G+",\t la masa del atractor = "+a.mass, 50, height-60); if (velo) { fill(49, 23); noStroke(); rect(0, 0, width, height); } } void mousePressed() { a.clicked(mouseX, mouseY); } void mouseReleased() { a.stopDragging(); } void keyPressed() { if (key == ' ') { showVectors = !showVectors; } if (key == 'v') { velo = !velo; } } // Renders a vector object 'v' as an arrow and a location 'loc' void drawVector(PVector v, PVector loc, float scayl) { strokeWeight(.75); if (v.mag() > 0.0) { pushMatrix(); float arrowsize = 889; // Translate to location to render vector translate(loc.x, loc.y); stroke(133, 67, 67, 123); // Call vector heading function to get direction (note that pointing up is a heading of 0) and rotate rotate(v.heading2D()); // Calculate length of vector & scale it to be bigger or smaller if necessary float len = v.mag()*scayl; // Draw three lines to make an arrow (draw pointing up since we've rotate to the proper direction) line(0, 0, len, 0); line(len, 0, len-arrowsize, +arrowsize/2); line(len, 0, len-arrowsize, -arrowsize/2); popMatrix(); } } /********************************************************************************/ // Attraction // Daniel Shiffman <http://www.shiffman.net> // A class for a draggable attractive body in our world class Attractor { float mass; // Mass, tied to size float G; // Gravitational Constant PVector loc; // Location boolean dragging = false; // Is the object being dragged? boolean rollover = false; // Is the mouse over the ellipse? PVector drag; // holds the offset for when object is clicked on Attractor(PVector l_,float m_, float g_) { loc = l_.get(); mass = m_; G = g_; drag = new PVector(0.0,0.0); } void go() { render(); drag(); } PVector calcGravForce(Thing t) { PVector dir = PVector.sub(loc,t.getLoc()); // Calculate direction of force float d = dir.mag(); // Distance between objects d = constrain(d, 2.0, 250.0); // Limiting the distance to eliminate "extreme" results for very close or very far objects dir.normalize(); // Normalize vector (distance doesn't matter here, we just want this vector for direction) float force = (G * mass * t.getMass()) / (d * d); // Calculate gravitional force magnitude dir.mult(force); // Get force vector --> magnitude * direction return dir; } // Method to display void render() { strokeWeight(mass / 10); stroke(0, 100); ellipseMode(CENTER); if (dragging) fill (50); else if (rollover) fill(100); else fill(175,200); ellipse(loc.x,loc.y,mass*2,mass*2); noStroke(); } // The methods below are for mouse interaction void clicked(int mx, int my) { float d = dist(mx,my,loc.x,loc.y); if (d < mass) { dragging = true; drag.x = loc.x-mx; drag.y = loc.y-my; } } void rollover(int mx, int my) { float d = dist(mx,my,loc.x,loc.y); if (d < mass) { rollover = true; } else { rollover = false; } } void stopDragging() { dragging = false; } void drag() { if (dragging) { loc.x = mouseX + drag.x; loc.y = mouseY + drag.y; } } } /**********************************************************************************/ // Attraction // Daniel Shiffman <http://www.shiffman.net> // A class to describe a thing in our world, has vectors for location, velocity, and acceleration // Also includes scalar values for mass, maximum velocity, and elasticity class Thing { PVector loc; // location PVector vel; // velocity PVector acc; // acceleration float mass; float max_vel; color col; Thing(PVector a, PVector v, PVector l, float m_) { acc = a.get(); vel = v.get(); loc = l.get(); mass = m_; max_vel = 20.0; col = color(random(180, 255), random(100, 175), random(30), 200); } PVector getLoc() { return loc; } PVector getVel() { return vel; } float getMass() { return mass; } void applyForce(PVector force) { force.div(mass); acc.add(force); if (showVectors) { drawVector(force,loc, 100); } } // Main method to operate object void go() { update(); render(); } // Method to update location void update() { vel.add(acc); vel.limit(max_vel); loc.add(vel); // Multiplying by 0 sets the all the components to 0 acc.mult(0); } // Method to display void render() { ellipseMode(CENTER); fill(col); ellipse(loc.x,loc.y,mass,mass); if (showVectors) { drawVector(vel,loc,60); } } } </nowiki></pre> Resumen: Esta es una edición menor Vigilar esta página Guardar la página Mostrar previsualización Mostrar los cambios Cancelar