DOM Canvas 곡선 그리기

황제낙엽 2016.08.22 07:10 조회 수 : 424

sitelink1 http://blog.naver.com/shadowbug/220741292339 
sitelink2  
sitelink3  
sitelink4  
extra_vars5  
extra_vars6  

주요 원(호) 그리기 함수

 

 설명

 beginPath()

패스 그리기를 선언한다.

 closePath()

 패스를 닫는다.

 arc(x, y, radius, startAngle, endAngle, articlockwise)

원을 그린다.

- x, y : 원점

- radius : 반지름

- startAngle : 원이 시작되는 지점 (0 <= startAngle <= 2*Math.PI)

- endAngle : 원이 종료되는 위치 (0 <= endAngle <= 2*Math.PI)

- articlewise : 원을 그리는 방향 설정

false : startAngle에서 endAngle만큼 시계반대 방향으로 원을 그려나간다.

true : startAngle에서 endAngle만큼 시계방향으로 원을 그려나간다.

 

artTo(x1, y1, x2, y2, radius)

 두 직선 사이의 호를 그릴 때 사용되는 함수이다.

 자세한 사용방법은 아래 섹션에서 확인하시길 바란다.

 

  스크린샷_2016-06-20_오후_10.23.31.png

 

 quadraticCurveTo(cx, cy, x, y);

  제어점이 한개인 2차 베지어곡선을 그린다.

 

 스크린샷_2016-06-21_오전_7.33.06 (1).png

 

 bezierCurveTo(cx1, cy1, cx2, cy2, x1, y1)

 제어점이 2개인 3차 베지어곡선을 그린다.

 

스크린샷_2016-06-21_오전_7.29.28 (1).png

 

 

 

 

arc 함수

 아래의 예제는 원을 그리는 예제이다.

정확하게 설명하자면 0에서 2PI만큼 (50, 50)을 원점으로 50픽셀의 반지름만큼 그린 예제이다.

마지막 인수의 경우 원의 경우, 큰 의미가 없지만, 호를 그릴경우 중요한 변수이다.

  1. function draw(target) {

  2.     var canvas = document.getElementById("draw");

  3.  

  4.     // 지원 여부 체크

  5.     if (canvas.getContext) {

  6.         // HTML5에서 canvas를 지원시

  7.  

  8.         // 그리기 오브젝트를 받음

  9.         var ctx = canvas.getContext('2d');

  10.  

  11.         ctx.beginPath();

  12.         // 캔버스 크기는 100x100이상이 되어야 재대로 나온다.

  13.         ctx.arc(50, 50, 50, 0, Math.PI * 2, true);

  14.         ctx.closePath();

  15.         ctx.stroke();

  16.     }

  17. }

 

arcTo 함수

두 직선 사이의 호를 그릴 때 사용되는 함수이다.

 

arcTo 함수는 절대 혼자서 사용할 수 없으며,

moveTo와 lineTo의 도움을 받아야 원하는 로직을 작성 할 수 있다.

 

먼저 정의를 하고 설명하도록 하겠다.

moveTo로 입력받는 매개변수는 (x0, y0)

arcTo로 입력받는 매개변수는 (x1, y1, x2, y2, radius )

lineTo로 입력받는 매개변수는 (x2, y2) 의 조건을 만족해야 한다.

 

이때 두 점 (x0, y0), (x1, y1)로 연결되는 선을 l1,

(x1, y1), (x2, y2)로 연결되는 선을 l2라고 하자.

 

여기서 (x1, y1)은 교차점을 의미하므로, 두 선 l1, l2는 반드시 평행하지 않도록 주의해야 한다.

 스크린샷_2016-06-20_오후_10.18.34.png

 

 

이때 지름이 radius이고 두 선 l1, l2와 내접하는 원을 아래와 같이 그린다.

(x0, y0)과 내접하는 원의 점, 그리고 바깥쪽의 원, 그리고 내접하는 원의 점과 (x2, y2)에 선이 

아래 빨간 선처럼 그어지게 된다.

 스크린샷_2016-06-20_오후_10.23.31 (1).png

 

 

결국 결과적으로 보면 두 선 사이에 원형 곡선을 그릴 때 사용한다고 생각하면 된다.

 

 

 

  1. function draw(target) {

  2.     var canvas = document.getElementById("draw");

  3.  

  4.     // 지원 여부 체크

  5.     if (canvas.getContext) {

  6.         // HTML5에서 canvas를 지원시

  7.  

  8.         // 그리기 오브젝트를 받음

  9.         var ctx = canvas.getContext('2d');

  10.  

  11.         /* 호 그리기 */

  12.         ctx.moveTo(10, 200);

  13.         ctx.arcTo(200, 200, 200, 10, 100);

  14.         ctx.lineTo(200, 10);

  15.         ctx.stroke();

  16.  

  17.     }

  18. }

결과

두 선사이에 원에 의해서 부드럽게 그려졌음을 확인 할 수 있다.

 스크린샷_2016-06-20_오후_10.25.56.png

 

quadraticCurveTo 함수 (2차 베이지 곡선)

(x0, y0)과 (x1, y1)사이의 선 사이에 제어점(cx, cy)를 설정하여 접선에 의하여 제어받는 곡선을 그린다.

아래의 이미지 및 애니메이션을 참조하자.

스크린샷_2016-06-21_오전_7.33.06 (1).png Bzier_2_big.gif

 

 

javascript

  1. function load(target) {

  2.     // 실제로 그려지는 위치의 캔버스 생성

  3.     var canvas = document.getElementById("draw");

  4.     ctx = canvas.getContext("2d");

  5.    

  6.     ctx.beginPath();

  7.     ctx.moveTo(0, 0);

  8.     ctx.quadraticCurveTo(200, 0, 200, 200);

  9.     ctx.stroke();

  10. }

결과

 스크린샷_2016-06-21_오전_7.10.32.png

 

 

bezierCurveTo(cx1, cy1, cx2, cy2, x1, y1)

두 점 (x0, y0), (x1, y1) 사이에 제어점이 2개를 설정하여 접선에 의하여 제어받는 곡선을 그린다.

아래의 이미지 및 애니메이션을 참조하자.

 

 스크린샷_2016-06-21_오전_7.29.28 (1).png Bzier_3_big.gif

 

 

  1. function load(target) {

  2.     // 실제로 그려지는 위치의 캔버스 생성

  3.     var canvas = document.getElementById("draw");

  4.     ctx = canvas.getContext("2d");

  5.    

  6.     ctx.beginPath();

  7.     ctx.moveTo(0, 100);

  8.     ctx.bezierCurveTo(100, 0, 200, 200, 300, 100);

  9.     ctx.stroke();

  10. }

  11.  

결과

 스크린샷_2016-06-21_오전_7.24.44.png

 

 

번호 제목 글쓴이 날짜 조회 수
125 characters from ISO 8859-1 황제낙엽 2020.11.10 28619
124 [ActiveX] CAB파일 수동 설치(레지스트리 등록) 방법 황제낙엽 2017.03.16 3162
123 네이버의 무료 나눔 글꼴 황제낙엽 2020.05.06 1110
122 <img> image 엘리먼트에서 이미지를 base64로 인코딩해서 사용하기 file 황제낙엽 2017.04.01 977
121 Document documentMode Property file 황제낙엽 2011.10.04 906
120 encoding, charset, code page, UTF-8, UNICODE ... file 황제낙엽 2013.08.07 731
119 pt, px, em, % 비교표 file 황제낙엽 2011.05.24 731
118 [MSDN] Document Object Model Prototypes (IE8) 황제낙엽 2011.03.24 716
117 User Agent 에 관련된 링크 황제낙엽 2017.11.20 595
» Canvas 곡선 그리기 file 황제낙엽 2016.08.22 424
115 document.domain (from mozilla.org) 황제낙엽 2013.03.13 407
114 ASCII Table and Description file 황제낙엽 2011.08.10 357
113 DIV태그로 테이블 만들기 황제낙엽 2005.12.24 300
112 Object의 주요 속성 황제낙엽 2011.02.14 278
111 모바일 브라우저에서 iframe 의 스크롤 문제 황제낙엽 2012.01.12 267
110 Canvas 도형의 클릭 이벤트 처리 황제낙엽 2016.08.22 263
109 Style cssText Property 황제낙엽 2012.09.13 257
108 스타일-보더 테스트 관련 레퍼런스 황제낙엽 2013.01.04 248
107 HTML5 강좌 2강 - HTML5 시맨틱웹을 위한 구성요소 file 황제낙엽 2016.12.03 246
106 로드밸런싱(L4)+아파치를 운영시 etag제거로 캐시 성능 최적화 file 황제낙엽 2018.03.28 226