vector - Perpendicular line java -
hello need find perpendicular line another. have 1 initial point(x,y), 1 final point(x, y) , measure de perpendicular line. have tried in various ways i've seen on page i'm doing wrong. whenever line perpendicular axis y o axis x instead of line. know tell me i'm doing wrong?
some links have been looking @ are:
calculate perpendicular offset diagonal line
how calculate end points of perpendicular line segments?
thank much.
canvas.addpaintlistener(new paintlistener() { public void paintcontrol(paintevent arg0) { ////pruebas con arcos ///pruebas con perpendiculares point centro = new point(0, 0); point director = new point(0, 0); point normalizado = new point(0, 0); point escalado = new point(0, 0); point rotado = new point(0, 0); point resultadomas = new point(0, 0); point resultadomenos = new point(0, 0); int coordx1; int coordy1; int coordx2; int coordy2; int coordx3; int coordy3; int coordx4; int coordy4; int altoarticulo = 80; coordx1 = 100; coordy1 = 100; coordx2 = 600; coordy2 = 300; //centro centro.x = (coordx1 + coordx2)/2; centro.y = (coordy1 + coordy2)/2; //vector director director.x = centro.x - coordx1; director.y = centro.y - coordy1; //medida double medida = math.sqrt(((math.pow(director.x, 2)) + (math.pow(director.y, 2)))); //normalizar vector normalizado.x = (int)math.round(director.x / medida); normalizado.y = (int)math.round(director.y / medida); //rotaciÓn 90 grados rotado.x = (normalizado.y * -1); rotado.y = normalizado.x; //sumar lo obtenido al punto medio resultadomas.x = centro.x + (rotado.x * altoarticulo); resultadomas.y = centro.y + (rotado.y * altoarticulo); resultadomenos.x = centro.x - (rotado.x * altoarticulo); resultadomenos.y = centro.y - (rotado.y * altoarticulo); //punto4.x = (int) math.round(punto3.x + ((math.signum(vectordirector.y) * -1) * ((math.sin(math.toradians(anguloejey)) * mideescalado)))); //punto4.y = (int) math.round(punto3.y + ((math.signum(vectordirector.y) * -1) * ((math.cos(math.toradians(anguloejey)) * mideescalado)))); arg0.gc.setforeground(display.getcurrent().getsystemcolor(swt.color_red)); arg0.gc.setbackground(display.getcurrent().getsystemcolor(swt.color_red)); arg0.gc.drawline(coordx1, coordy1, coordx2, coordy2); arg0.gc.drawline(resultadomas.x, resultadomas.y, resultadomenos.x, resultadomenos.y); int[] comopinto = {resultadomas.x, resultadomas.y, resultadomas.x + 10, resultadomas.y + 10, resultadomas.x - 10, resultadomas.y + 10}; arg0.gc.drawpolygon(comopinto); arg0.gc.fillpolygon(comopinto); int[] comopinto2 = {resultadomenos.x, resultadomenos.y, resultadomenos.x + 10, resultadomenos.y - 10, resultadomenos.x - 10, resultadomenos.y - 10}; arg0.gc.drawpolygon(comopinto2); arg0.gc.fillpolygon(comopinto2); }
someone told me mistake , share if helps you. problem here:
normalizado.x = (int)math.round(director.x / medida); normalizado.y = (int)math.round(director.y / medida);
when rounding result invalid.for round coordinates in next step , works properly. thus:
double normx = rotado.x / medida; double normy = rotado.y / medida; //sumar lo obtenido al punto medio resultadomas.x = (int) math.round(centro.x + (normx * altoarticulo)); resultadomas.y = (int) math.round(centro.y + (normy * altoarticulo)); resultadomenos.x = (int) math.round(centro.x - (normx * altoarticulo)); resultadomenos.y = (int) math.round(centro.y - (normy * altoarticulo));
thank time , regreted.
Comments
Post a Comment