From 6b3a07e114b435ef6662ee0a83c48fa882b10b42 Mon Sep 17 00:00:00 2001 From: Wellington Gabriel Vicente de Souza <wgvs16@inf.ufpr.br> Date: Fri, 27 Apr 2018 12:01:13 -0300 Subject: [PATCH] [T3] change polygon generator function, fix right click functionaly --- T3/lines.js | 90 ++++++++++++++++++++++------------------------------- 1 file changed, 38 insertions(+), 52 deletions(-) diff --git a/T3/lines.js b/T3/lines.js index 12bda3f..8935ae5 100644 --- a/T3/lines.js +++ b/T3/lines.js @@ -79,6 +79,12 @@ function handleMouseUp() { draggingSecondEnd = false; } +function distance(x0,y0,xf,yf) { + power2X = Math.pow(x0 - xf,2); + power2Y = Math.pow(y0 - yf,2); + return Math.sqrt(power2X + power2Y); +} + function dragLine() { if (selectedLine != null) { if (movingEntireLine) { @@ -140,6 +146,11 @@ function dragLine() { } } +function isOnLine(x0, y0, xf, yf, px, py) { + var f = function(somex) { return (yf - y0) / (xf - x0) * (somex - x0) + y0; }; + return Math.abs(f(px) - py) < 20 && px >= x0 && px <= xf; +} + function handleMouse() { if (mouseDown && selectedLine == null) { for (var i = lines.length - 1; i >= 0; i--) { @@ -147,11 +158,13 @@ function handleMouse() { selectedLine = i; movingEntireLine = true; break; - } else if (mouseX >= lines[i].x0 - 20 && mouseX <= lines[i].x0 + 20 && mouseY >= lines[i].y0 - 20 && mouseY <= lines[i].y0 + 20) { + } else if (mouseX >= lines[i].x0 - 20 && mouseX <= lines[i].x0 + 20 && + mouseY >= lines[i].y0 - 20 && mouseY <= lines[i].y0 + 20) { selectedLine = i; draggingFirstEnd = true; break; - } else if (mouseX >= lines[i].xf - 20 && mouseX <= lines[i].xf + 20 && mouseY >= lines[i].yf - 20 && mouseY <= lines[i].yf + 20) { + } else if (mouseX >= lines[i].xf - 20 && mouseX <= lines[i].xf + 20 + && mouseY >= lines[i].yf - 20 && mouseY <= lines[i].yf + 20) { selectedLine = i; draggingSecondEnd = true; break; @@ -159,7 +172,16 @@ function handleMouse() { } } else if (rightClick) { for (var i = lines.length - 1; i >= 0; i--) { - if ((mouseY >= lines[i].y0 && mouseY <= lines[i].yf) || (mouseY >= lines[i].yf && mouseY <= lines[i].y0)) { + // distanceMouseX0 = distance(mouseX,mouseY,lines[i].x0,lines[i].y0); + // distanceMouseXF = distance(mouseX,mouseY,lines[i].xf,lines[i].yf); + // distanceX0XF = distance(lines[i].x0,lines[i].y0,lines[i].xf,lines[i].yf); + // console.log(distanceMouseX0,distanceMouseXF,distanceX0XF); + // if ((distanceMouseX0 + distanceMouseXF >= distanceX0XF - 20) && (distanceMouseX0 + distanceMouseXF <= distanceX0XF + 20)) { + //console.log("isOnLine: ", isOnLine(lines[i].x0,lines[i].y0,lines[i].xf,lines[i].yf,mouseX,mouseY)); + var mouseOnLine = isOnLine(lines[i].x0,lines[i].y0,lines[i].xf,lines[i].yf,mouseX,mouseY) + || isOnLine(lines[i].xf,lines[i].yf,lines[i].x0,lines[i].y0,mouseX,mouseY); + console.log(mouseOnLine); + if (mouseOnLine) { if (mouseX >= lines[i].x0 && mouseX <= lines[i].xf) { lines[lines.length] = new Line(mouseX,mouseY,lines[i].xf,lines[i].yf); lines[i].xf = mouseX; @@ -170,7 +192,7 @@ function handleMouse() { lines[i].centerY = lines[i].y0 + lines[i].height/2; rightClick = 0; break; - } else if (mouseX < lines[i].x0 && mouseX > lines[i].xf) { + } else if (mouseX <= lines[i].x0 && mouseX >= lines[i].xf) { lines[lines.length] = new Line(mouseX,mouseY,lines[i].x0,lines[i].y0); lines[i].x0 = mouseX; lines[i].y0 = mouseY; @@ -190,54 +212,18 @@ function generatePolygon() { edges = parseInt(document.getElementById("number").value,10); if (edges >= 3 && edges <= 8) { lines = []; - switch (edges) { - case 3: - lines = [new Line(centerX,centerY-300,centerX+300,centerY+300), //linha \ - new Line(centerX,centerY-300,centerX-300,centerY+300), //linha / - new Line(centerX-300,centerY+300,centerX+300,centerY+300)]; //linha _ - break; - case 4: - lines = [new Line(centerX-300,200,centerX+300,200), //linha _ topo - new Line(centerX+300,200,centerX+300,800), //linha | direita - new Line(centerX-300,200,centerX-300,800), //linha | esquerda - new Line(centerX-300,800,centerX+300,800)]; //linha _ baixo - break; - case 5: - lines = [new Line(centerX,centerY-350,centerX+300,centerY-150), //linha \ direita - new Line(centerX,centerY-350,centerX-300,centerY-150), //linha / esquerda - new Line(centerX+300,centerY-150,centerX+215,centerY+200), //linha \ esquerda - new Line(centerX-300,centerY-150,centerX-215,centerY+200), //linha / direita - new Line(centerX-215,centerY+200,centerX+215,centerY+200)]; //linha _ baixo - break; - case 6: - lines = [new Line(centerX-200,200,centerX+200,200), //linha _ topo - new Line(centerX-200,200,centerX-400,550), //linha / esq - new Line(centerX-400,550,centerX-200,900), //linha \ esq - new Line(centerX+200,200,centerX+400,550), //linha / dir - new Line(centerX+400,550,centerX+200,900), //linha \ dir - new Line(centerX-200,900,centerX+200,900)]; //linha _ baixo - break; - case 7: - lines = [new Line(centerX-250,300,centerX,200), //linha / topo - new Line(centerX,200,centerX+250,300), //linha / topo - new Line(centerX-250,300,centerX-350,630), //linha / esq - new Line(centerX+250,300,centerX+350,630), //linha \ dir - new Line(centerX-350,630,centerX-170,900), //linha \ esq - new Line(centerX+350,630,centerX+170,900), //linha / dir - new Line(centerX-170,900,centerX+170,900)]; //linha _ baixo - break; - case 8: - lines = [new Line(centerX-220,100,centerX+220,100), //linha _ topo - new Line(centerX-220,100,centerX-420,375), //linha / esq - new Line(centerX-420,375,centerX-420,650), //linha | esq - new Line(centerX-420,650,centerX-220,925), //linha \ esq - new Line(centerX+220,100,centerX+420,375), //linha / esq - new Line(centerX+420,375,centerX+420,650), //linha | esq - new Line(centerX+420,650,centerX+220,925), //linha \ esq - new Line(centerX-220,925,centerX+220,925)]; //linha _ baixo - break; - default: - break; + var tmpx0 = centerX + 300; + var tmpy0 = centerY; + + var edge = (2 * Math.PI)/edges; + for (var i = 0; i < edges; i++) { + var angle = edge * (i+1); + var tmpxf = 300 * Math.cos(angle) + centerX; + var tmpyf = 300 * Math.sin(angle) + centerY; + lines[i] = new Line(tmpx0, tmpy0, tmpxf,tmpyf); + console.log(lines[i]); + tmpx0 = tmpxf; + tmpy0 = tmpyf; } drawCurrentCanvas(); } else { -- GitLab