2013-11-27 7 views
0

나는 한 세트의 변수에 버텍스 포인트를 저장할 3D 모델링 앱을 만들고 있습니다. 이러한 변수를 동적으로 추가하거나 제거해야하는 정점을 동적으로 추가하거나 제거 할 수 있어야합니다. 각면은 점 좌표가 포함 된 변수에 연결된 ID로이 점을 참조합니다. 런타임에 변수를 만들고 파괴하는 방법이 있습니까? 기존 데이터 형식으로이를 수행하는 더 좋은 방법이 있습니까? 배열을 쉽게 추가하거나 제거하기 위해 독립적이어야하기 때문에 배열이 작동하지 않을 것이라고 생각합니다. 또한 부동 소수점 오류 또는 기타 작은 변화가 서로 옆에 중복 된 점을 만들기 때문에 점의 좌표를 직접 저장할 수 없습니다.참조 할 수있는 ID로 런타임에 변수 만들기

+2

아마도'Dictionary '을 찾고있을 것입니다 ... –

답변

1

Dictionary을 사용하는 것을 고려하십시오 (Alexei는 그의 의견에서 지적했습니다). 사전은 값을 추가, 제거 및 검색하는 경우 매우 빠릅니다.

키에 관해서는, 옵션은

  • 순차 int
  • GUID를

순차적 정점 데이터에 기초하여 해시

  • 최악 인 longint은 많은 유스 케이스에서 잘 작동하지만 새로운 ID를 요청하는 스레드가 여러 개있는 경우 약간의 경합이 발생할 수 있습니다 그는 다음 ID (그리고 스레딩에 대한 우수 사례를 반드시 준수해야합니다).

    long 해시 위험 충돌. 해시가 좌표에서 파생 된 경우 동일한 좌표 (서로 다른 좌표를 갖는 정점이 해시 충돌의 일반적인 위험을 감수하는)로 관리중인 여러 정점을 가질 수 있습니다.

    Guid은 키가 상당히 크며, 특히 많은 점이 있지만 고유성이 보장됩니다.

  • +0

    고마워요. "Guid가 꽤 큽니다"라고 말하면 기억의 측면에서 의미합니까? 장면에 단지 수천 개의 정점이 있다면 이것은 정말로 중요할까요? – Keavon

    +0

    네, 기억면에서는 그렇지만, 근대 컴퓨터에 몇 천 개가 있어도 상관 없습니다. Dictionary에 액세스 할 때 Guid의 해시를 계산하는 데 약간의 비용이 있습니다 (int 및 long은 해시 키로 실제 값을 사용합니다). Dictionary가 엄격한 루프에서 반복적으로 액세스되지 않는 한 비용은 사소한 것입니다 (이 경우 응용 프로그램의 컨텍스트에서 중요한지 확인하기 위해 비용을 벤치마킹합니다). –