2011-09-07 3 views
3

HTML5 캔버스를 통해 가입 라인에 있지만 같은 일부 aligment 문제가 : 나는 빨간색과 일부 결합 부분을 표시서클 내가 라인을 통해 각 원에 가입하고 내 마지막 코드를 수행하려고

enter image description here

을 원. 보시다시피 그들은 올바르게 정렬되지 않습니다 (선이 원의 중심을 벗어나지 않습니다).

<!DOCTYPE HTML> 
<html> 
    <head> 
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 
    </head> 
    <body> 
     <canvas id="graph" width="982" height="636" style="width:491px"> 
     Tarayıcınız Canvas Desteklemiyor ! 
     </canvas> 

     <script type="text/javascript"> 
     var i = 0; 
     var lastCoord = new Array(); 
     var c=document.getElementById("graph"); 
     var cxt=c.getContext("2d"); 

     function getParam(name) 
     { 
      name = name.replace(/[\[]/, "\\\[").replace(/[\]]/, "\\\]"); 
      var regexS = "[\\?&]" + name + "=([^&#]*)"; 
      var regex = new RegExp(regexS); 
      var results = regex.exec(window.location.href); 
      if(results == null) 
      return ""; 
      else 
      return decodeURIComponent(results[1].replace(/\+/g, " ")); 
     } 

     function drawCircleAndLine(x, y) 
     {   
      cxt.fillStyle="#000000"; 
      cxt.beginPath(); 

      if(i == 0) cxt.arc(x, y, 9, 0, Math.PI*2, false); 
      else cxt.arc(x, y, 6, 0, Math.PI*2, false); 

      cxt.closePath(); 
      cxt.fill(); 

      if(i % 4 != 0) 
      { 
       cxt.lineWidth = 8; 

       cxt.lineTo(lastCoord[0], lastCoord[1]); 
       cxt.stroke(); 
      } 
      else { 
       cxt.moveTo(lastCoord[0], lastCoord[1]); 
       cxt.lineTo(lastCoord[0], lastCoord[1]); 
       cxt.stroke(); 
      } 

      lastCoord = [x, y]; 
      i++; 

     } 

     var coords = { 
      0 : { 
       0 : { 
         "0" : { "x" : 50, "y" : 580}, 
         "1" : { "x" : 50, "y" : 540}, 
         "2" : { "x" : 50, "y" : 472}, 
         "3" : { "x" : 50, "y" : 430}, 
         "4" : { "x" : 50, "y" : 400}, 
         "5" : { "x" : 50, "y" : 382}, 
         "6" : { "x" : 50, "y" : 340}, 
         "7" : { "x" : 50, "y" : 300}, 
         "8" : { "x" : 50, "y" : 250}, 
         "9" : { "x" : 50, "y" : 205}, 
         "10" : { "x" : 50, "y" : 160}, 
         "12" : { "x" : 50, "y" : 138}, 
         "14" : { "x" : 50, "y" : 110}, 
         "15" : { "x" : 50, "y" : 85}, 
         "16" : { "x" : 50, "y" : 65}, 
         "20" : { "x" : 50, "y" : 40} 
        }, 

       1 : { 
         "0" : { "x" : 98, "y" : 555}, 
         "1" : { "x" : 98, "y" : 493}, 
         "2" : { "x" : 98, "y" : 451}, 
         .............. 
         "-4" : { "x" : 926, "y" : 356}, 
         "-5" : { "x" : 926, "y" : 375}, 
         "-6" : { "x" : 926, "y" : 398}, 
         "-7" : { "x" : 926, "y" : 428}, 
         "-8" : { "x" : 926, "y" : 452}, 
         "-9" : { "x" : 926, "y" : 476}, 
         "-10" : { "x" : 926, "y" : 500}, 
         "-11" : { "x" : 926, "y" : 530}, 
         "-12" : { "x" : 926, "y" : 550}, 
         "-16" : { "x" : 926, "y" : 588} 
        } 
       } 
      }; 

     var bg = new Image(); 
     bg.src = "images/disc_graph_empty.jpg"; 
     bg.onload = function() { 
      cxt.drawImage(bg, 0, 0); 

      try 
      { 
       drawCircleAndLine(coords[0][0][getParam('d1')]["x"], coords[0][0][getParam('d1')]["y"]); 
       drawCircleAndLine(coords[0][2][getParam('d2')]["x"], coords[0][3][getParam('d2')]["y"]); 
       drawCircleAndLine(coords[0][2][getParam('d3')]["x"], coords[0][2][getParam('d3')]["y"]); 
       drawCircleAndLine(coords[0][3][getParam('d4')]["x"], coords[0][3][getParam('d4')]["y"]); 

       drawCircleAndLine(coords[1][0][getParam('d5')]["x"], coords[1][0][getParam('d5')]["y"]); 
       drawCircleAndLine(coords[1][4][getParam('d6')]["x"], coords[1][5][getParam('d6')]["y"]); 
       drawCircleAndLine(coords[1][2][getParam('d7')]["x"], coords[1][2][getParam('d7')]["y"]); 
       drawCircleAndLine(coords[1][3][getParam('d8')]["x"], coords[1][3][getParam('d8')]["y"]); 

       drawCircleAndLine(coords[2][0][getParam('d9')]["x"], coords[2][0][getParam('d9')]["y"]); 
       drawCircleAndLine(coords[2][6][getParam('d10')]["x"], coords[2][7][getParam('d10')]["y"]); 
       drawCircleAndLine(coords[2][2][getParam('d11')]["x"], coords[2][2][getParam('d11')]["y"]); 
       drawCircleAndLine(coords[2][3][getParam('d12')]["x"], coords[2][3][getParam('d12')]["y"]); 
      } 
      catch(err) 
      { 
       alert('Hata Oluştu !\nBazı noktalar yerleşmemiş olabilir.\n\n\n' + err); 
      } 
     } 
     </script> 

    </body> 
</html> 

모든 파일 : http://www.2shared.com/file/Uyh2J0Ni/canvas.html

+0

코드에 오류가 있습니다. 먼저 오류를 수정할 수 있습니까? –

+0

이 행은 : var results = regex.exec (window.location.href);가 우리 자신의 기계에서 실행될 때 달라지기 때문에. –

답변

5

여기에 문제가 무엇인지 지적한다 코드의 주요 단순화이다. 채우기가 옅은 파란색으로 표시되고 획 너비가 작아서 문제를 볼 수 있습니다.

drawCircleAndLine(100,100); 
drawCircleAndLine(100,200); 

당신은 바로 아래 라인을 기대하지만, 분명히 똑바로 않을 것입니다 : 난 그냥 두 번 함수를 호출하고! 여기를 참조하십시오 :

http://jsfiddle.net/24khs/

무엇 벌어지고있는 것은 이것이다 :

처음으로, 다만 원은 100,100에서 중심으로 그려되고있다. 괜찮습니다

두 번째로 원이 200,200에 그려지고 그 지점에서 경로의 끝이 원의 가장 오른쪽 부분 (약 106,200)입니다. 그런 다음 (106,200)에서 (100,100)까지 선을 그립니다.

이 문제를 해결하려면 올바른 위치에서 줄을 시작하도록 lineTo 앞에 하나의 명령 인 moveTo(x, y)을 추가하면됩니다. 여기를 참조하십시오 : 당신이 게시

http://jsfiddle.net/6VfvG/

관련 문제