CanvasRenderingContext2D.setTransform 설명 > 메모

본문 바로가기
사이트 내 전체검색

메모

javascript CanvasRenderingContext2D.setTransform 설명

페이지 정보

profile_image
작성자 최고관리자
댓글 0건 조회 11회 작성일 25-10-30 10:55

본문

CanvasRenderingContext2D.setTransform 설명

  • 정의: 2D 캔버스 컨텍스트(ctx)의 현재 변환 행렬을 “덮어쓰기”로 설정합니다. 이후의 모든 그리기 연산에 적용됩니다.
  • 시그니처
    • ctx.setTransform(a, b, c, d, e, f)
    • ctx.setTransform(DOMMatrix) 또는 ctx.setTransform(SVGMatrix)

매개변수 의미

  • a, b, c, d, e, f는 2×3 행렬 요소로, 점 변환은 다음과 같습니다:
    • x′= a*x + c*y + e
    • y′= b*x + d*y + f
  • 직관적으로:
    • a, d: 스케일/회전의 주 대각 요소
    • b, c: 회전/기울이기(shear)
    • e, f: 평행이동(translate)

핵심 포인트

  • 덮어쓰기: 기존 변환에 누적하지 않고, 지정한 행렬로 “바로 교체”합니다.
    - 누적 변환이 필요하면 ctx.transform(...)을 사용하세요.
  • 초기화: ctx.setTransform(1, 0, 0, 1, 0, 0)은 단위 행렬, 즉 변환 초기화와 동일합니다.
    - 최신 표준에서는 ctx.resetTransform()도 제공됩니다.
  • 상태 스택: ctx.save()/ctx.restore()와 함께 사용하면 구간별로 변환을 안전하게 적용/복구할 수 있습니다.

자주 쓰는 패턴 예시


// 단위 행렬로 초기화
ctx.setTransform(1, 0, 0, 1, 0, 0);

// 특정 위치(100, 80)에 45도 회전, 2배 스케일을 한 번에 설정
const angle = Math.PI / 4;
const cos = Math.cos(angle), sin = Math.sin(angle);
const sx = 2, sy = 2;
ctx.setTransform(
  cos * sx,  // a
  sin * sx,  // b
  -sin * sy, // c
  cos * sy,  // d
  100,       // e (translate x)
  80         // f (translate y)
);
ctx.fillRect(-25, -25, 50, 50); // 원점 기준 도형을 위치/회전/스케일 적용해 그리기

DOMMatrix 사용 예시


const m = new DOMMatrix()
  .translate(100, 80)
  .rotate(45)        // 단위: 도(deg)
  .scale(2, 2);
ctx.setTransform(m);

팁과 주의사항

  • 누적과의 차이: 기존 상태에 이어서 변환하려면 transform(누적), 처음부터 정확히 세팅하려면 setTransform(덮어쓰기).
  • 그리기 순서: 변환 설정 → 그리기. 변환은 설정 이후에만 적용됩니다.
  • 성능: 잦은 변환 변경은 비용이 있으니, 필요한 구간에만 설정하고 save/restore를 활용하세요.

댓글목록

등록된 댓글이 없습니다.

회원로그인

회원가입

사이트 정보

회사명 : 티로그 / 대표 : 김태규
주소 :부산광역시 수영구 광안로7번길 22 창성빌딩 3층
사업자 등록번호 : 617-86-10993
전화 : 051-325-6700 팩스 : 051-325-5665
통신판매업신고번호 : 제 2013-부산수영-0167 호
개인정보관리책임자 : 손승목

  • 게시물이 없습니다.

접속자집계

오늘
1,792
어제
2,676
최대
4,387
전체
468,521
Copyright © 소유하신 도메인. All rights reserved.