본문 바로가기
programming/Graphics

svg path 패스 절대좌표 상대좌표 방향성 이해하기

by 개코 - 개발과 코딩 2021. 9. 14.

svg path 를 이용해 점의 이동경로를 표시할 때 절대좌표와 상대좌표를 이용해 표현할 수 있다. 절대좌표는 점의 이동경로의 도착지가 어디에 위치하는지 정확하게 설정하지만 상대좌표는 이동경로의 도착지 좌표가 얼마만큼 이동했는지를 표시하는 의미이기도 하다. 방향성을 가지고 있기 때문에 + - 의 기호가 붙는다.

 

svg path 패스 절대좌표 상대좌표

너비와 높이가 정해진 좌표계에서 좌표는 0,0 부터 정해진 너비와 높이까지 모든 점이 존재한다.

그 점들을 svg path 로 표현하여 점의 이동경로를 선으로써 표현할 수 있다.

svg path 는 선이 아닌 점이 이동경로인 것에 주목하자.

( 가시적으로는 선으로써 보인다. )

 

점의 이동경로에 대해 절대좌표와 상대좌표를 이해하기 전에 이전에 작성한 svg 패스 선그리기를 참조해 본다.

▶ svg path 패스 수평선 수직선 그리기 draw svg Horizontal Vertical line path

 

절대좌표 선그리기

간단한 선을 그린다.

먼저 그려볼 선은 ㄱ 자 형태로 절대좌표를 이용해 점의 이동경로를 표현할 것이다.

너비와 높이가 각각 300,300 인 좌표계를 만들었다.

  1. 시작점은 100,100 이다.
  2. H 200,100 인 위치로 점의 이동경로를 그린다. ( 수평선 )
  3. V 200,200 인 위치로 점의 이동경로를 그린다. ( 수직선 )
<html>
    <body>

        <h1>SVG 경로 그리기</h1>

        <svg height="300" width="300" style="border:1px solid black;">

            <path d="M 100,100 H 200 V 200" 
                stroke="#eb6e4c" fill="none" stroke-width="1" stroke-linecap="round" />

        </svg>

    </body>
</html>

위의 점이 그려지는 과정을 코드에서 비교하면 아래와 같다.

점이 이동하는 모든 도착지 좌표를 절대좌표로 정해주었다.

  1. M 100,100
  2. H 200, 100
  3. V 200, 200

위의 순서까지 표시한 결과화면은 아래와 같다.

  1. 점의 최조 시작위치 M 100, 100
  2. 수평 이동좌표 H 200, 100
  3. 수직 이동좌표 V 200, 200

 

상대좌표 선그리기

절대좌표는 점의 이동하는 도착지 좌표가 정확하게 설정되기 때문에 방향성이 필요가 없다.

하지만, 상대좌표를 사용할 경우 + - 의 방향성을 가진다.

  • 수평선의 경우 오른쪽은 + , 왼쪽은 - 의 방향성을 가진다.
  • 수직선의 경우 아래쪽은 + , 위쪽은 - 의 방향성을 가진다.

이것은 모니터에 그려지는 x,y 좌표와 같다.

모니터에 주사되는 모든 객체들은
왼쪽에 오른쪽으로 그리고 위에서 아래로 주사된다.

위의 결과화면를 상대좌표로 표시해 본다.

어렵다면 편하게 더하기 빼기의 개념으로 이해하도록 하자.

  • 우측으로 얼마 +N , 좌측으로 얼마 -N
  • 아래로 얼마 +N , 위쪽으로 얼마 -N
<html>
    <body>

        <h1>SVG 경로 그리기</h1>

        <svg height="300" width="300" style="border:1px solid black;">

            <path d="M 100,100 h 100 v 100" 
                stroke="#eb6e4c" fill="none" stroke-width="1" stroke-linecap="round" />

        </svg>

    </body>
</html>

차이가 보이는지

일단 인자값이 H 200 과 V 200 이 h 100 v 100 으로 변경된 것에 주목하자.

대문자 H 와 V 는 절대좌표를 의미한다.
소문자 h 와 v 는 상대좌표를 의미한다.

그렇다면 위의 구문은 다음과 같다.

  1. 점의 최조 시작위치 M 100, 100
  2. 수평 이동좌표 h 100 우측으로 100만큼 이동한다.
  3. 수직 이동좌표 v 100 아래로 100만큼 이동한다.

상대좌표는 방향성을 가진다고 언급했다.

우측과 아래쪽의 방향성은 + 이기 때문에 인자값만 소문자로 변경하면 된다.

 

그렇다면 반대의 경우는 어떨까

  1. 점의 최조 시작위치 M 200, 200
  2. 수평 이동좌표 h -100 좌측으로 100만큼 이동한다.
  3. 수직 이동좌표 v -100 위쪽으로 100만큼 이동한다.

코드로 만들면 아래와 같다.

<html>
    <body>

        <h1>SVG 경로 그리기</h1>

        <svg height="300" width="300" style="border:1px solid black;">

            <path d="M 200,200 h -100 v -100" 
                stroke="#eb6e4c" fill="none" stroke-width="1" stroke-linecap="round" />

        </svg>

    </body>
</html>

위의 코드와 순서를 잘 파악한다.

아래의 결과화면의 숫자는 점이 이동한 순서이다.

인자값을 준 순서대로 상대적으로 동작하기 때문에 아래의 결과 화면처럼 나온다.

 

반응형

댓글