Curve 지오메트리 등분하기

2024년 10월 17일

다이나모에서 형상을 다루다 보면 Curve를 등분해야 할 경우가 많이 있습니다. 다양한 방식으로 커브를 등분해서 필요한 위치에 포인트를 생성할 수 있으며, 이를 통해 원하는 형태의 지오메트리를 쉽게 조작할 수 있습니다. 이번 포스팅에서는 다이나모에서 자주 사용하는 4가지 커브 등분 노드를 중심으로 알아보겠습니다.

다이나모의 커브 등분 노드

좌측 Dynamo Library에서 커브를 등분할 수 있는 다양한 노드를 찾을 수 있습니다. 그 중 자주 쓰이는 대표적인 4가지 노드는 다음과 같습니다:

  • Curve.PointAtSegmentLength
  • Curve.PointsAtEqualSegmentLength
  • Curve.PointAtParameter
  • Curve.PointsAtEqualChordLength

이 노드들의 활용 방법과 차이점을 알아보겠습니다.

1.Curve.PointAtSegmentLength

이 노드는 커브 전체에서 입력한 길이(SegmentLength)에 해당하는 위치에 포인트를 생성합니다.

예를 들어, 아래 그림처럼 SegmentLength5000을 입력하면 커브 시작점에서 길이가 5000만큼 떨어진 지점에 포인트가 생성됩니다.

Curve..PointAtSegmentLength
이미지 1. Curve.PointAtSegmentLength ⓒ디지털디자인포럼

확인 방법

생성된 포인트의 위치가 정확한지 확인하려면, Split 노드를 사용하여 커브를 분할하고 각 커브의 길이를 확인할 수 있습니다. 부동 소수점 오차로 인해 아주 약간의 공차는 있지만 첫 번째 커브의 길이가 5000임을 확인할 수 있습니다.

2.Curve.PointsAtEqualSegmentLength

이 노드는 커브를 등 간격으로 나누고, divisions에 입력된 개수만큼 포인트를 생성합니다.

Curve.PointsAtEqualSegmentLength
이미지 2. Curve.PointsAtEqualSegmentLength ⓒ디지털디자인포럼

확인 방법

포인트가 정확히 등분되어 있는지 확인하려면, 위와 마찬가지로 Split 노드를 사용해 각 커브를 나누고, 분할된 커브들의 길이를 확인해보면 각 커브의 길이가 동일한 것을 확인할 수 있습니다.

3.Curve.PointAtParameter

이 노드는 커브를 0에서 1까지의 도메인 값으로 변환한 후, 해당 param 값에 위치한 포인트를 생성합니다.

주의할 점은 도메인의 중심값 0.5가 커브 길이의 정확한 중간이 아니라는 것입니다. Split으로 커브를 나눠보면 생성된 커브의 길이가 다를 수 있습니다.

Curve.PointsAtParameter
이미지 3. Curve.PointsAtParameter ⓒ디지털디자인포럼

참고

이 기능은 그라스호퍼의 Reparameterize와 유사합니다.

4.Curve.PointsAtEqualChordLength

이 노드는 시작점과 끝점에는 포인트를 생성하지 않고, 커브의 내부에 포인트를 생성합니다. divisions에 입력된 개수만큼 커브를 일정한 간격으로 나눈 포인트를 생성합니다.

특징

[이미지 4]처럼 Split으로 커브를 나누어 확인해보면 길이가 같지 않다는 것을 알 수 있습니다. 이 노드는 커브의 절점을 직선으로 연결했을 때 그 길이가 같은 위치에 포인트를 생성하는 방식입니다.

Curve.PointsAtEqualChordLength
이미지 4. Curve.PointsAtEqualChordLength ⓒ디지털디자인포럼

확인 방법

[이미지 5]처럼 커브의 시작점과 끝점을 추가하여, 생성된 포인트들을 연결한 직선의 길이를 확인하면 길이가 동일한 것을 알 수 있습니다.

Curve.PointsAtEqualChordLength
이미지 5. Curve.PointsAtEqualChordLength ⓒ디지털디자인포럼

마무리

지금까지 다이나모에서 자주 사용되는 Curve 지오메트리 등분 방법에 대해 알아보았습니다. 이 기능들을 활용하면 복잡한 커브의 포인트를 정밀하게 제어할 수 있으며, 다양한 지오메트리 작업에 유용하게 응용할 수 있습니다.

궁금한 점이 있거나 추가적인 설명이 필요하다면 댓글이나 포럼에 질문을 남겨주세요!


답글 남기기


관련 포스트

  • 다이나모에서 구성평면과 벡터 크기 및 방향 확인하는 방법

  • 다이나모에서 데이터 타입(Data Type) 이해하기

  • 다이나모에서 리스트 분할하기: List.Chop 및 List.Slice 노드 사용법

  • 다이나모에서 특정 Index의 Item 추출 또는 특정 Item의 Index 추출하기

  • Dynamo에서 True값과 False값 구분하기: List.FilterByBoolMask 사용법

  • Dynamo에서 유형 파라미터 vs 인스턴스 파라미터: 차이점과 사용법

  • Dynamo에서 n번째 항까지의 총합 구하기: List.Scan 사용법

  • 리스트에서 첫 번째 및 마지막 아이템 추출 방법과 제외한 나머지 리스트 얻기