Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   canvas и метод arc (https://javascript.ru/forum/events/33223-canvas-i-metod-arc.html)

cyber 14.11.2012 15:34

canvas и метод arc
 
не совсем пойму как работает метод arc обьекта CanvasRenderingContext2D
как я понял исходя из статьи https://developer.mozilla.org/ru/doc...B3%D1%83%D1%80 и еще нескольких других ctx.arc(x, y , radius ,startAngle,endAngle);
<!DOCTYPE HTML>
<html>
  <head>
    <style>
      canvas {
      
        border:1px solid black;
      }
    
    </style>
  </head>
  <body>
    <canvas width="500" height="500" id="canvas"></canvas>
    <script>

      var canva = document.getElementById("canvas");
      var ctx = canva.getContext("2d");
    
      
      
       ctx.arc(170,170, 50, 0 , 180);
      ctx.fill();
 
    </script>

  </body>
</html>

проблема именно с параметрами startAngle и endAngle , если startAngle = 0 , а endAngle = 360 - то это будет круг , а если endAngle = 180 - то это полу-круг .
Но как бы я не менял параметр endAngle все равно рисует круг.
Где я туплю?

dmitriymar 14.11.2012 15:50

cyber,
углы в радианах а не в градусах радианы = (Math.PI/180)*градусы

cyber 14.11.2012 15:58

dmitriymar,
черт точно, за втыкал, спасибо.

cyber 14.11.2012 18:57

хм.. , еще не совсем понятно, почему рисует именно с правого края?
<!DOCTYPE HTML>
<html>
  <head>
    <style>
      canvas {
      
        border:1px solid black;
      }
    
    </style>
  </head>
  <body>
    <canvas width="500" height="500" id="canvas"></canvas>
    <script>

      var canva = document.getElementById("canvas");
      var ctx = canva.getContext("2d");
      ctx.width = 500;
      ctx.height = 500;
      
      var up = 360/60, angle = 0;
      
       
      
    !function timer() {
      
      if(angle == 360) return;
      
      angle += up;
      
      ctx.fillStyle = "red";
   
       ctx.arc(100,100, 40, 0,(Math.PI/180)* angle);
      ctx.fill();
      ctx.beginPath();
   
      
   
      
      setTimeout(timer,60);
      
      }();


    </script>

  </body>
</html>

melky 14.11.2012 21:11

Цитата:

Сообщение от cyber
хм.. , еще не совсем понятно, почему рисует именно с правого края?

потому что (0;0) находится слева сверху.

cyber 14.11.2012 23:49

melky, 0,0 находиться по центру.

cyber 14.11.2012 23:52

melky,
<!DOCTYPE HTML>
<html>
  <head>
    <style>
      canvas {
      
        border:1px solid black;
      }
    
    </style>
  </head>
  <body>
    <canvas width="500" height="500" id="canvas"></canvas>
    <script>

      var canva = document.getElementById("canvas");
      var ctx = canva.getContext("2d");
      ctx.width = 500;
      ctx.height = 500;
      var radius = 40;
    
      ctx.arc(100,0,radius,0 , (Math.PI/180)* 360);
      ctx.fill();
      ctx.beginPath();
       
      ctx.arc(200,radius,radius,0 , (Math.PI/180)* 360);
      ctx.fill();
      ctx.beginPath();
    

    </script>

  </body>
</html>

если бы он был с лева в верху то мне можно было смело идти переписывать 70% логики моего арканоида)

Дзен-трансгуманист 15.11.2012 01:10

cyber,
Сделай мячик спрайтом и не ипи себе мозг. =)

BTW, указывай параметр anticlockwise, пожалуйста, а то не везде без него работает.

Дзен-трансгуманист 15.11.2012 01:14

Цитата:

Сообщение от melky
потому что (0;0) находится слева сверху.

Ага, если только translate не применял. ;)

cyber 15.11.2012 08:35

Дзен-трансгуманист, да с мячиком проблема нет, просто хотел сделать анимацию загрузки таким вот извращенным способом но почему она видет себя так понять не могу.
А насчет параметра anticlockwise - яего указываю просто тестовый пример по быстрому писался ,как всегда.)


Часовой пояс GMT +3, время: 00:19.