8 de junio de 2016

Processing. Recta que pasa por dos puntos.

import javax.swing.JOptionPane; // Permite introducir números

float x1 = 30;
float y1 = 80;
float px1 = 0;
float py1 = 0;
float x2 = 30;
float y2 = 80;
float px2 = 0;
float py2 = 0;

float x3 = 0;
float x4 = 0;
float y3 = 0;
float y4 = 0;
float px3 = 0;
float py3 = 0;
float px4 = 0;
float py4 = 0;

float a = 0.0;
float b = 0.0;

void setup() {
  size(600,400);
  x1 = pedirNumero("Dame la x del primer punto","Punto 1");
  y1 = pedirNumero("Dame la y del primer punto","Punto 1");
  x2 = pedirNumero("Dame la x del segundo punto","Punto 2");
  y2 = pedirNumero("Dame la y del segundo punto","Punto 2");
  x3 = -width/2;
  x4 = width/2;
  a = (y2-y1)/(x2-x1);
  b = y1-a*x1;
  y3 = a*x3+b;
  y4 = a*x4+b;
  println(str(x1)+","+str(y1));
  println(str(x2)+","+str(y2));
  println("A: "+str(a)+" - B:"+str(b));
}

void draw() {
 background(254);
 stroke(0);
 line (0,height/2,width,height/2); // eje x
 line (width/2,0,width/2,height); // eje Y

 // Transformadas
 px1 = width/2+x1;
 py1 = height/2-y1;
 px2 = width/2+x2;
 py2 = height/2-y2;

 for (int xx=-width/2; xx<=width/2; xx=xx+3) {
    y3 = a*xx+b;
    if ((y3>-height/2) && (y3<height/2)) {
         px3 = width/2+xx;
         py3 = height/2-y3;
         noStroke();
         fill(0,255,0);
         ellipse(px3,py3,1,1);
    }
 }

 // Segmento
 stroke(0);
 line(px1,py1,px2,py2);

  // dibujar
 dibujarCruz(px1,py1);
 dibujarCruz(px2,py2);

}


// Input Box
float pedirNumero(String frase, String titulo) {
  float i = 0;
  String r = JOptionPane.showInputDialog(null,frase,titulo, JOptionPane.QUESTION_MESSAGE);
  try {
    i = Float.parseFloat(r);
  } catch(NumberFormatException e) {
    println("you did not enter a number!");
  }
  return i;
}

void dibujarCruz(float px, float py) {
    stroke(0,0,255);
    line (px-3,py-3,px+3,py+3);
    line (px-3,py+3,px+3,py-3);  
}

No hay comentarios:

Publicar un comentario