2011-09-07 66 views
3

我試圖通過線加入每一個圓,我的最終代碼執行,但它有一些aligment問題,這樣的:圓線過HTML5畫布加入

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/