| 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) | 두 직선 사이의 호를 그릴 때 사용되는 함수이다. 자세한 사용방법은 아래 섹션에서 확인하시길 바란다. 
    
 | 
| quadraticCurveTo(cx, cy, x, y); | 제어점이 한개인 2차 베지어곡선을 그린다. 
   
 | 
| bezierCurveTo(cx1, cy1, cx2, cy2, x1, y1) | 제어점이 2개인 3차 베지어곡선을 그린다. 
 
 
 | 
arc 함수
아래의 예제는 원을 그리는 예제이다.
정확하게 설명하자면 0에서 2PI만큼 (50, 50)을 원점으로 50픽셀의 반지름만큼 그린 예제이다.
마지막 인수의 경우 원의 경우, 큰 의미가 없지만, 호를 그릴경우 중요한 변수이다.
- 
	function draw(target) { 
- 
	var canvas = document.getElementById("draw"); 
- 
	
- 
	// 지원 여부 체크 
- 
	if (canvas.getContext) { 
- 
	// HTML5에서 canvas를 지원시 
- 
	
- 
	// 그리기 오브젝트를 받음 
- 
	var ctx = canvas.getContext('2d'); 
- 
	
- 
	ctx.beginPath(); 
- 
	// 캔버스 크기는 100x100이상이 되어야 재대로 나온다. 
- 
	ctx.arc(50, 50, 50, 0, Math.PI * 2, true); 
- 
	ctx.closePath(); 
- 
	ctx.stroke(); 
- 
	} 
- 
	} 
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는 반드시 평행하지 않도록 주의해야 한다.
 
이때 지름이 radius이고 두 선 l1, l2와 내접하는 원을 아래와 같이 그린다.
(x0, y0)과 내접하는 원의 점, 그리고 바깥쪽의 원, 그리고 내접하는 원의 점과 (x2, y2)에 선이
아래 빨간 선처럼 그어지게 된다.
 
결국 결과적으로 보면 두 선 사이에 원형 곡선을 그릴 때 사용한다고 생각하면 된다.
- 
	function draw(target) { 
- 
	var canvas = document.getElementById("draw"); 
- 
	
- 
	// 지원 여부 체크 
- 
	if (canvas.getContext) { 
- 
	// HTML5에서 canvas를 지원시 
- 
	
- 
	// 그리기 오브젝트를 받음 
- 
	var ctx = canvas.getContext('2d'); 
- 
	
- 
	/* 호 그리기 */ 
- 
	ctx.moveTo(10, 200); 
- 
	ctx.arcTo(200, 200, 200, 10, 100); 
- 
	ctx.lineTo(200, 10); 
- 
	ctx.stroke(); 
- 
	
- 
	} 
- 
	} 
결과
두 선사이에 원에 의해서 부드럽게 그려졌음을 확인 할 수 있다.
 
quadraticCurveTo 함수 (2차 베이지 곡선)
(x0, y0)과 (x1, y1)사이의 선 사이에 제어점(cx, cy)를 설정하여 접선에 의하여 제어받는 곡선을 그린다.
아래의 이미지 및 애니메이션을 참조하자.
 
 
javascript
- 
	function load(target) { 
- 
	// 실제로 그려지는 위치의 캔버스 생성 
- 
	var canvas = document.getElementById("draw"); 
- 
	ctx = canvas.getContext("2d"); 
- 
	
- 
	ctx.beginPath(); 
- 
	ctx.moveTo(0, 0); 
- 
	ctx.quadraticCurveTo(200, 0, 200, 200); 
- 
	ctx.stroke(); 
- 
	} 
결과
 
bezierCurveTo(cx1, cy1, cx2, cy2, x1, y1)
두 점 (x0, y0), (x1, y1) 사이에 제어점이 2개를 설정하여 접선에 의하여 제어받는 곡선을 그린다.
아래의 이미지 및 애니메이션을 참조하자.
  
 
- 
	function load(target) { 
- 
	// 실제로 그려지는 위치의 캔버스 생성 
- 
	var canvas = document.getElementById("draw"); 
- 
	ctx = canvas.getContext("2d"); 
- 
	
- 
	ctx.beginPath(); 
- 
	ctx.moveTo(0, 100); 
- 
	ctx.bezierCurveTo(100, 0, 200, 200, 300, 100); 
- 
	ctx.stroke(); 
- 
	} 
- 
	
결과
 
댓글 0
| 번호 | 제목 | 글쓴이 | 날짜 | 조회 수 | 
|---|---|---|---|---|
| 68 | Canvas 도형의 클릭 이벤트 처리 | 황제낙엽 | 2016.08.22 | 514 | 
| 67 | Canvas 이미지 추출 | 황제낙엽 | 2016.08.22 | 327 | 
| 66 | Canvas 더블버퍼링 | 황제낙엽 | 2016.08.22 | 441 | 
| 65 | Canvas 비트맵 그리기   | 황제낙엽 | 2016.08.22 | 265 | 
| 64 | Canvas 그라디언트 그리기   | 황제낙엽 | 2016.08.22 | 249 | 
| 63 | Canvas 텍스트 그리기   | 황제낙엽 | 2016.08.22 | 247 | 
| » | Canvas 곡선 그리기   | 황제낙엽 | 2016.08.22 | 658 | 
| 61 | Canvas 다각형 그리기   | 황제낙엽 | 2016.08.22 | 345 | 
| 60 | Canvas 사각형 그리기   | 황제낙엽 | 2016.08.22 | 269 | 
| 59 | Canvas 시작하기   | 황제낙엽 | 2016.08.22 | 260 | 
| 58 | HTML5 개발을 도와주는 도구들 | 황제낙엽 | 2014.04.04 | 209 | 
| 57 | encoding, charset, code page, UTF-8, UNICODE ...   | 황제낙엽 | 2013.08.07 | 1007 | 
| 56 | document.domain (from mozilla.org) | 황제낙엽 | 2013.03.13 | 814 | 
| 55 | 우리은행 웹 접근성 가이드   | 황제낙엽 | 2013.03.08 | 268 | 
| 54 | 모든 브라우저에서 동작하는 opacity 설정 코드 | 황제낙엽 | 2013.02.14 | 249 | 
| 53 | DXImageTransform.Microsoft.AlphaImageLoader 와 file dialog | 황제낙엽 | 2013.01.28 | 397 | 
| 52 | Gradient 와 Background-Image 동시 적용 방안 | 황제낙엽 | 2013.01.11 | 387 | 
| 51 | 그라디언트와 다중 배경 (gradient)   | 황제낙엽 | 2013.01.11 | 279 | 
| 50 | CSS Gradient Background Maker   | 황제낙엽 | 2013.01.11 | 265 | 
| 49 | Radius, Gradient, Padding | 황제낙엽 | 2013.01.11 | 267 | 
 
							
