Diferencia entre revisiones de «Eber Sáez proyecto Luz»

De Casiopea
Sin resumen de edición
Sin resumen de edición
 
(No se muestran 4 ediciones intermedias del mismo usuario)
Línea 3: Línea 3:
|Asignaturas Relacionadas=Imagen Escrita
|Asignaturas Relacionadas=Imagen Escrita
|Cursos Relacionados=Imagen Escrita 2019 T1
|Cursos Relacionados=Imagen Escrita 2019 T1
|Carreras Relacionadas=Arquitectura, Diseño
|Carreras Relacionadas=Arquitectura, Diseño Gráfico, Diseño Industrial
|Alumnos=Eber Sáez
|Alumnos=Eber Sáez
|Imagen=Hazluz0750
}}
}}
El proyecto se muestra a través de una app exportada desde Processing.
El proyecto se muestra a través de una app exportada desde Processing.
Línea 16: Línea 17:
*Líneas: Líneas rectas que representan los haces luminosos, nacen desde la partícula y se extienden hasta chocar con un muro o los bordes.
*Líneas: Líneas rectas que representan los haces luminosos, nacen desde la partícula y se extienden hasta chocar con un muro o los bordes.


 
<gallery>
[[Archivo:Hazluz0747.png|150px|thumb|left|Comportamiento de la luz al colisionar con un objeto]][[Archivo:Hazluz0749.png|150px|thumb|center|Imagen desde processing]]
Archivo:Hazluz0747.png|300px|Comportamiento de la luz al colisionar con un objeto
 
Archivo:Hazluz0748.png|300px|Imagen desde processing
Archivo:Hazluz0749.png|300px|Imagen desde processing
Archivo:Hazluz0750.png|350px|Mayor angulación de las líneas en el objeto
</gallery>





Revisión actual - 00:36 21 may 2019



TítuloEber Sáez - Proyecto Luz
AsignaturaImagen Escrita
Del CursoImagen Escrita 2019 T1
CarrerasArquitectura, Diseño Gráfico"Diseño Gráfico" is not in the list (Arquitectura, Diseño, Magíster, Otra) of allowed values for the "Carreras Relacionadas" property., Diseño Industrial"Diseño Industrial" is not in the list (Arquitectura, Diseño, Magíster, Otra) of allowed values for the "Carreras Relacionadas" property.
Alumno(s)Eber Sáez

El proyecto se muestra a través de una app exportada desde Processing. Se busca a partir de un objeto generador de luz, observar el comportamiento de haces luminosos al enfrentarse a un objeto sólido (no traslúcido).

-El objeto luminoso (partícula)se representa como un punto, desde el cual salen líneas en todas direcciones.La superposición de líneas en el origen hace que se ilumine con mayor intensidad. La partícula se desplaza con el ratón, permitiendo que los haces interactúen con las líneas que se generan al azar.

-Elementos :

  • Muros: Líneas con largo y posición creadas aleatoriamente. Mayor grosor.
  • Partícula: punto de origen de líneas.
  • Líneas: Líneas rectas que representan los haces luminosos, nacen desde la partícula y se extienden hasta chocar con un muro o los bordes.


Código Processing

Particula part;
muro[] muro = new muro[5];       //defino la cantidad de muros
luz[] luz = new luz[360];

void setup() {
  size(800, 600);
  background(0);
  part = new Particula(width/2, height/2);

  for (int i = 0; i<muro.length; i++) {
    muro[i] = new muro(random(width), random(height), random(width), random(height));
  }

  for (int i = 0; i<luz.length; i++) {
    luz[i] = new luz( i*TWO_PI/luz.length);
  }
}

void draw() {
  background(0);


  // control with Mouse
  part.MouseMove();
   
  //part.move();

  part.show();

  for (int i = 0; i<muro.length; i++) {
    muro[i].show();
  }
}

class Particula {
  float x, y, nx, ny, t1, t2, xSpeed, ySpeed;
  PVector pos;


  Particula(float _x, float _y) {
    x = _x;
    y = _y;
  }

  void MouseMove() { // posición del mouse
    x = mouseX;
    y = mouseY;
    pos = new PVector(x, y);
    point(pos.x, pos.y);
  }

  void show() {
    for (int i = 0; i<luz.length; i++) {
      PVector closest = new PVector (0, 0);
      float rec = 100000;
      for (int j = 0; j<muro.length; j++) {
         
        luz[i].CollisionCheck(muro[j].p1.x, muro[j].p1.y, muro[j].p2.x, muro[j].p2.y);

        if (0 <= luz[i].t && luz[i].t <= 1 && 0 <= luz[i].u) {
          float d = dist(luz[i].pos.x, luz[i].pos.y, luz[i].poi.x, luz[i].poi.y);
          if (d < rec) {
            rec = d;
            closest = luz[i].poi;
          }
        }
      }
      stroke(255, 255, 90); // color y espesor haz de luz 
      strokeWeight(1);
      if (closest.x == 0 & closest.y == 0) {
        luz[i].show();
      } else {
        line(luz[i].pos.x, luz[i].pos.y, closest.x, closest.y);
      }
    }
  }
}

class luz {
  float angle, x1, x2, y1, y2, x3, y3, x4, y4, t, u;
  PVector dir, pos, poi;

  luz(float _angle) {
    angle = _angle;
  }

  void CollisionCheck(float _x1, float _y1, float _x2, float _y2 ) {
    pos = part.pos;
    dir = PVector.fromAngle(angle);
    dir.add(pos);
    x1 = _x1; 
    y1 = _y1;
    x2 = _x2; 
    y2 = _y2;
    x3 = pos.x;
    y3 = pos.y;
    x4 = dir.x;
    y4 = dir.y;

    float dom = ((x1-x2)*(y3-y4))-((y1-y2)*(x3-x4));

    if (dom == 0) {
      t = -1;
    } else {
      t = (((x1-x3)*(y3-y4))-((y1-y3)*(x3-x4)))/dom;
      u = -((((x1-x2)*(y1-y3))-((y1-y2)*(x1-x3)))/dom);

      poi = new PVector(0, 0);

      if (0 <= t && t <= 1 && 0 <= u) {
        float px = x1 + (t * (x2 - x1));
        float py = y1 + (t * (y2 - y1));
        poi = new PVector(px, py);
      }
    }
  }

  void show() {
    pos = part.pos;
    dir = PVector.fromAngle(angle);
    dir.mult(100000);
    dir.add(pos);
    line(pos.x, pos.y, dir.x, dir.y);
  }
}

class muro {
  PVector p1, p2;

  muro(float x1, float y1, float x2, float y2) {
    p1 = new PVector(x1, y1);
    p2 = new PVector(x2, y2);
  }

  void show() {
    stroke(255, 50, 98);
    strokeWeight(8);
    line(p1.x, p1.y, p2.x, p2.y);
  }
}