javascript/canvas
캔버스로 기본 도형(2d) 그리기
범부의 삶
2023. 10. 8. 19:05
캔버스는 웹 페이지에 그래픽을 그리는 데에 사용되며, 이미지, 그래프, 애니메이션 등 시각적 요소를 생성하고 조작할 수 있습니다. 이 포스팅에서는 캔버스를 이용해 2d 기본 도형을 그리는 방법을 알아보겠습니다.
캔버스로 기본 도형(2d) 그리기
목차
1. 캔버스란?
- 웹 페이지에 그래픽을 그리는 데 사용
- 이미지, 그래프, 애니메이션, 게임에 활용 가능
- 빠른 그래픽 렌더링으로 고성능
- 복잡한 시각적 효과, 애니메이션에 적용 가능
- 캔버스 생성하기
- canvas 생성 후, id를 이용해 canvas 변수에 할당하기
- canvas에서 ctx 가져오기
<canvas id="my-canvas1" width="400" height="400"></canvas>
<script>
// canvas 변수에 할당하기
const canvas1 = document.getElementById("my-canvas1");
// "context"의 약자로, 캔버스의 요소를 조작할 때 사용
const ctx1 = canvas1.getContext("2d");
</script>
2. 직선 그리기
- 시작점, 끝점 좌표 정하기
- 선 설정하기
- 좌표 이으면서 선 그리기
const canvas1 = document.getElementById("my-canvas1");
const ctx1 = canvas1.getContext("2d");
// 시작점, 끝점 좌표 정하기
const startX = 50;
const startY = 50;
const endX = 100;
const endY = 100;
// 선 설정 정하기
ctx1.strokeStyle = "black";
ctx1.lineWidth = 2;
// 선 그리기 시작
ctx1.beginPath();
// 시작점 설정
ctx1.moveTo(startX, startY);
// 끝점 설정
ctx1.lineTo(endX, endY);
// 선 그리기
ctx1.stroke();
3. 사각형 그리기
- 사각형 스타일 설정하기
- 사각형 위치, 크기 설정하기
- ctx.fillRect(x 좌표, y 좌표, 가로 길이, 세로 길이)
- fillRect는 색이 채워진 사각형, strokeRect는 테두리만 그려진 사각형이 그려짐
const canvas2 = document.getElementById("my-canvas2");
const ctx2 = canvas2.getContext("2d");
// 사각형 스타일 설정
// 채우기 색상
ctx2.fillStyle = "black";
// 테두리 색상
ctx2.strokeStyle = "black";
// 테두리 두께
ctx2.lineWidth = 2;
// 사각형 그리기
// x 좌표, y 좌표, 가로 크기, 세로 크기
// 색깔 채워진 사각형
ctx2.fillRect(50, 50, 100, 100);
// 테두리만 있는 사각형
ctx2.strokeRect(50, 150, 100, 100);
4. 삼각형 그리기
- 삼각형의 세 꼭지점 좌표 정한 후 이어주기
const canvas3 = document.getElementById("my-canvas3");
const ctx3 = canvas3.getContext("2d");
ctx3.beginPath();
// 시작점
ctx3.moveTo(100, 50);
// 두번째 점
ctx3.lineTo(150, 150);
// 세번째 점
ctx3.lineTo(50, 150);
// 경로 닫기
ctx3.closePath();
// 테두리 색상
ctx3.strokeStyle = "black";
// 테두리 두께
ctx3.lineWidth = 2;
// 삼각형 채울 색상
ctx3.fillStyle = "blue";
// 삼각형 내부 색상 채우기
ctx3.fill();
// 삼각형 테두리 그리기
ctx3.stroke();
5. 곡선 그리기
- quadraticCurveTo() 혹은 bezierCurveTo() 함수 사용
- quadraticCurveTo(곡선 제어점 x 좌표, 곡선 제어점 y 좌표, 최종 x 좌표, 최종 y좌표)
- bezierCurveTo(1차 곡선 제어점 x 좌표, 1차 곡선 제어점 y 좌표, 2차 제어점 x, 2차 제어점 y, 최종 x, 최종 y)
const canvas4 = document.getElementById("my-canvas4");
const ctx4 = canvas4.getContext("2d");
ctx4.beginPath();
// 시작점 정하기
ctx4.moveTo(50, 50);
// 두 개의 제어점을 사용한 곡선 그리기
// 첫번째로 꺾을 지점 x 좌표, y좌표, 2번째로 꺾을 지점 x 좌표, y 좌표, 최종 x 좌표, y 좌표
ctx4.bezierCurveTo(50, 100, 150, 20, 250, 50);
ctx4.strokeStyle = "black";
ctx4.lineWidth = 2;
// 곡선을 테두리로 그리기
ctx4.stroke();
6. 원 그리기
- arc 메서드 사용
- arc(중심 x 좌표, 중심 y좌표, 반지름, 원의 시작 각도, 원의 끝 각도)
- 시작 각도, 끝 각도를 통해 원의 일부만 그릴 수도 있음
const canvas5 = document.getElementById("my-canvas5");
const ctx5 = canvas5.getContext("2d");
ctx5.beginPath();
// 중심 x 좌표, 중심 y, 좌표, 반지름, 원의 시작 각도, 원의 끝 각도
// 시작각도, 끝각도를 통해 원의 일부만 그릴 수도 있음
ctx5.arc(100, 100, 50, 0, 2 * Math.PI);
ctx5.fillStyle = "white";
ctx5.fill();
ctx5.strokeStyle = "black";
ctx5.lineWidth = 2;
ctx5.stroke();