• 티스토리 홈
  • 프로필사진
    루루개발자
  • 방명록
  • 공지사항
  • 태그
  • 블로그 관리
  • 글 작성
루루개발자
  • 프로필사진
    루루개발자
    • 분류 전체보기 (212)
      • react & next.js (12)
      • Node.js & Javascript & Type.. (24)
        • d3.js (10)
      • 차트 만들기 (1)
      • 티스토리 스킨 개발 (7)
      • 내가 만든 패키지 (3)
      • 내가 만든 CSS (1)
      • CSS (7)
      • 도커 & 쿠버네티스 (3)
      • 개인 프로젝트 (7)
      • 리뷰 & 추천 (2)
      • 알고리즘 (1)
      • IT 기타 (18)
      • 잡동사니 (1)
      • Spring Boot (5)
      • 취미로 그리는 그림들 (120)
      • 개인적인 생각들 (0)
  • 반응형
  • 방문자 수
    • 전체:
    • 오늘:
    • 어제:
  • 최근 댓글
      등록된 댓글이 없습니다.
    • 최근 공지
        등록된 공지가 없습니다.
      # Home
      # 공지사항
      #
      # 태그
      # 검색결과
      # 방명록
      • [006] d3.Voronoi
        2022년 06월 29일
        • 루루개발자
        • 작성자
        • 2022.06.29.오후10:36
        반응형

         

        d3.Voronoi


        d3.Voronoi 는 보로노이 다이어그램을 그리기 위해 사용되는 클래스이며, d3.Delaunay 의 voronoi 함수를 사용하는 방식의 다른 적용 방식입니다. d3-delaunay 포스팅 글을 참조하세요.

         

         

        예제


        다음과 같이 typescript 코드를 작성합니다. (js 로의 빌드는 esbuild 등으로 진행 하신 후, 브라우저에서 script 태그로 불러오시면 됩니다.)

        import * as d3 from 'd3';
        
        export declare namespace ID3VOronoi {
          export interface PointData {
            x: number;
            y: number;
          }
        }
        
        window.addEventListener('load', function() {
          // canvas 의 크기입니다.
          const w = 400;
          const h = 400;
        
          // canvas element 를 생성합니다.
          const canvas = document.createElement('canvas'); 
        
          // canvas context 를 가져옵니다.
          const context = canvas.getContext('2d');
          if (context === null) {
            return;
          }
        
          // canvas의 너비, 높이를 지정합니다.
          canvas.width = w;
          canvas.height = h;
        
          // canvas 에 표시될 좌표 데이터 입니다.  
          const pointsData: ID3VOronoi.PointData[] = [
            { x: 14, y: 23 }, 
            { x: 100, y: 100 }, 
            { x: 30, y: 250 },
            { x: 222, y: 65 },
            { x: 301, y: 274 },
            { x: 274, y: 288 },
            { x: 274, y: 351 },
            { x: 300, y: 300 },
            { x: 400, y: 380 },
          ];
        
          // d3.Voronoi 는 d3.Delaunay 의 voronoi 함수를 사용하는 방식의 다른 적용 방식입니다. d3-delaunay 을 참조하세요.
          const voronoi: d3.Voronoi<ID3VOronoi.PointData> = new (d3.Voronoi as any)( // 원래 d3.Voronoi 의 constructor 에 인자가 필요하나 이상하게 type 에는 정의가 되어 있지 않아 ts 에서 에러가 발생하여 as any 를 붙여주었습니다.
            d3.Delaunay.from(
              pointsData, 
              (d) => {
                // x 좌표에 해당하는 값 리턴
                return d.x;
              },
              (d) => {
                // y 좌표에 해당하는 값 리턴
                return d.y;
              },
            ),
            [0, 0, 400, 400]
          );
        
          console.log('voronoi.render()', voronoi.render());
        
          const pathInfo = voronoi.render();
          for (const path of pathInfo.split('M').slice(1)) {
            context.beginPath();
            context.strokeStyle = d3.hsl(360 * Math.random(), 0.7, 0.5).toString(); // 선 색상은 랜덤
            context.stroke(new Path2D('M' + path));
            context.closePath();
          }
        
          canvas.style.border = '1px solid #ccc';
          document.querySelector('body')?.appendChild(canvas);
        });

         

        결과는 다음과 같습니다.

         

         

        반응형

        'Node.js & Javascript & Typescript > d3.js' 카테고리의 다른 글

        [008] d3.active  (0) 2022.07.08
        [007] d3.ZoomTransform  (0) 2022.06.30
        [005] d3.InternSet  (0) 2022.06.28
        [004] d3.InternMap  (0) 2022.06.27
        [003] d3.FormatSpecifier  (0) 2022.06.20
        다음글
        다음 글이 없습니다.
        이전글
        이전 글이 없습니다.
        댓글
      조회된 결과가 없습니다.
      스킨 업데이트 안내
      현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
      ("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)
      목차
      표시할 목차가 없습니다.
      • d3.Voronoi
      • 예제
      • 안녕하세요
      • 감사해요
      • 잘있어요

      티스토리툴바

      단축키

      내 블로그

      내 블로그 - 관리자 홈 전환
      Q
      Q
      새 글 쓰기
      W
      W

      블로그 게시글

      글 수정 (권한 있는 경우)
      E
      E
      댓글 영역으로 이동
      C
      C

      모든 영역

      이 페이지의 URL 복사
      S
      S
      맨 위로 이동
      T
      T
      티스토리 홈 이동
      H
      H
      단축키 안내
      Shift + /
      ⇧ + /

      * 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.