๋ฐ˜์‘ํ˜•

๋„ํ˜• ์‚ฌ์ด์ฆˆ ์กฐ์ • ๋ฉ”์„œ๋“œ


ctx.scale(x, y) : ๋„ํ˜• ํฌ๊ธฐ ํ™•๋Œ€/์ถ•์†Œ. ์บ”๋ฒ„์Šค์—์„œ 1 ๋‹จ์œ„๋Š” 1ํ”ฝ์…€. scale(2, 2)๋Š” ํ•˜๋‚˜์˜ ๋‹จ์œ„๋ฅผ 2ํ”ฝ์…€๋กœ ํ™•๋Œ€(์ขŒํ‘œ ์‚ฌ์ด์˜ ๊ฐ„๊ฒฉ ์ฆ๊ฐ€)

 

ctx.translate(x, y) : ์บ”๋ฒ„์Šค์˜ ์›์  ์ด๋™. ๊ธฐ๋ณธ๊ฐ’์€ ์™ผ์ชฝ ์ขŒ์ƒ๋‹จ (0, 0)

 

ctx.rotate(angle) : ๋„ํ˜•์„ ๋ผ๋””์•ˆ(angle) ๋‹จ์œ„ ๋งŒํผ ์‹œ๊ณ„ ๋ฐฉํ–ฅ์œผ๋กœ ํšŒ์ „. ํ•ญ์ƒ ์บ”๋ฒ„์Šค ์›์ ์ด ํšŒ์ „์˜ ์ค‘์‹ฌ

 

ctx.transform(scaleX, skewX, skewY, scaleY, translateX, translateY)

  • scale(), rotate(), translate() ์ผ๊ด„ ์ ์šฉํ•˜๋Š” ๋ฉ”์„œ๋“œ
  • ์ด์ „ ๋ณ€ํ˜• ๊ฒฐ๊ณผ ๊ฐ’์— ์ด์–ด์„œ ์ˆ˜ํ–‰
  • ์ดˆ๊ธฐ ์ƒํƒœ์—์„œ transform(1.2, 0, 0, 1.2, -30, -30)์„ 3๋ฒˆ ์ˆ˜ํ–‰ํ•˜๊ณ  Matrix ์ •๋ณด๋ฅผ ํ™•์ธํ•ด ๋ณด๋ฉด ์•„๋ž˜์™€ ๊ฐ™๋‹ค. ์ด์ „์— ์ˆ˜ํ–‰ํ•œ Matrix ๊ฒฐ๊ณผ ๊ฐ’์— ์ด์–ด์„œ transform()์ด ์ ์šฉ๋˜๊ธฐ ๋•Œ๋ฌธ
console.log(ctx.getTransform());
// ์ถœ๋ ฅ ๊ฒฐ๊ณผ: 1.72, 0, 0, 1.72, -90, -90

// scaleX ๋ณ€ํ™” ๊ณผ์ •: 1 * 1.2 * 1.2 * 1.2 = 1.72
// scaleY ๋ณ€ํ™” ๊ณผ์ •: 1 * 1.2 * 1.2 * 1.2 = 1.72
// translateX ๋ณ€ํ™” ๊ณผ์ •: 0 - 30 - 30 - 30 = -90
// translateY ๋ณ€ํ™” ๊ณผ์ •: 0 - 30 - 30 - 30 = -90

 

ctx.setTransform(scaleX, skewX, skewY, scaleY, translateX, translateY)

  • ์ด์ „ ์„ค์ •๊ฐ’์„ ๋ฌด์‹œํ•˜๊ณ  transform() ์‹คํ–‰
  • transform(1, 0, 0, 1, 0, 0)์ธ ์ƒํƒœ์—์„œ transform() ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ๊ณผ ๋™์ผ

 

ctx.getTransform() : ํ˜„์žฌ Matrix ์ •๋ณด ์กฐํšŒ

console.log(ctx.getTransform());
// DOMMatrix {a: 1, b: 0, c: 0, d: 1, e: 0, f: 0, ...}

 

ctx.resetTransform() : ํ˜„์žฌ Matrix ์ •๋ณด ์ดˆ๊ธฐํ™”

console.log(ctx.getTransform()); // 1.2, 0, 0, 1.2, -64, -87, ...
ctx.resetTransform(); // ํ˜น์€ ctx.setTransform(1, 0, 0, 1, 0, 0)
console.log(ctx.getTransform()); // 1, 0, 0, 1, 0, 0

 

scale() ์‹คํ–‰ ํ›„ ์›์  ์กฐ์ •


์บ”๋ฒ„์Šค์—์„œ `scale(2, 2)`๋ฅผ ์ ์šฉํ•˜๋ฉด ๋ชจ๋“  ๊ทธ๋ž˜ํ”ฝ ์š”์†Œ(๋„ํ˜•)์˜ ํฌ๊ธฐ๊ฐ€ 2๋ฐฐ๋กœ ๋Š˜์–ด๋‚˜๋ฏ€๋กœ, `scale()` ์ ์šฉ ์ „ ์บ”๋ฒ„์Šค ์ค‘์•™์— ๊ทธ๋ ธ๋˜ ๋„ํ˜•์€ ์•„๋ž˜์ฒ˜๋Ÿผ ๊ฐ€์žฅ์ž๋ฆฌ๋งŒ ๋ณด์ธ๋‹ค. 

์ฐธ๊ณ ๋กœ `scale()` ์ˆ˜ํ–‰์‹œ ์‹ค์ œ ์บ”๋ฒ„์Šค์˜ ๋ฌผ๋ฆฌ์  ํฌ๊ธฐ๊ฐ€ ๋Š˜์–ด๋‚˜๋Š” ๊ฒƒ์€ ์•„๋‹ˆ์ง€๋งŒ(๋…ผ๋ฆฌ์  ํ™•๋Œ€) ์•„๋ž˜๋Š” ์„ค๋ช…์˜ ํŽธ์˜๋ฅผ ์œ„ํ•ด ์บ”๋ฒ„์Šค ํฌ๊ธฐ๊ฐ€ ์ฆ๊ฐ€ํ•œ ๊ฒƒ์ฒ˜๋Ÿผ ์„ค๋ช…ํ–ˆ๋‹ค.

 

 

๋Š˜์–ด๋‚œ ์บ”๋ฒ„์Šค ํฌ๊ธฐ(width, height)์˜ ์ ˆ๋ฐ˜๋งŒํผ ์›์ ์„ ์ด๋™์‹œํ‚ค๋ฉด ์บ”๋ฒ„์Šค๊ฐ€ ์Šคํฌ๋ฆฐ ๊ฐ€์šด๋ฐ ๋ณด์ด๋„๋ก ์กฐ์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

  • ์›๋ž˜ ์บ”๋ฒ„์Šค ํฌ๊ธฐ๊ฐ€ width 600, height 400 ์ด๋ผ๊ณ  ๊ฐ€์ •
  • scale(2, 2) ํ›„ ์บ”๋ฒ„์Šค ํฌ๊ธฐ๋Š” width 1200, height 800
  • ํ™•๋Œ€ ์ „/ํ›„ ์บ”๋ฒ„์Šค ํฌ๊ธฐ ์ฐจ์ด๋Š” width 600, height 400
  • ๋Š˜์–ด๋‚œ ํฌ๊ธฐ์˜ ์ ˆ๋ฐ˜๋งŒํผ ์›์ ์„ ์ด๋™์‹œํ‚ค๋ฉด ๋„ํ˜•์ด ์Šคํฌ๋ฆฐ ์ •์ค‘์•™์— ์œ„์น˜ translate(-300, -200)

 


๊ธ€ ์ˆ˜์ •์‚ฌํ•ญ์€ ๋…ธ์…˜ ํŽ˜์ด์ง€์— ๊ฐ€์žฅ ๋น ๋ฅด๊ฒŒ ๋ฐ˜์˜๋ฉ๋‹ˆ๋‹ค. ๋งํฌ๋ฅผ ์ฐธ๊ณ ํ•ด ์ฃผ์„ธ์š”
๋ฐ˜์‘ํ˜•