2011-02-14 4 views
2

나는 경락과 피부를 저장하는 데 적합한 모델을 생각하고 있습니다. 경락과 평행선은 선으로 유지되어야합니다.경락과 평행을위한 데이터 모델

가능한 모델 :

A) 각 점 매장은 북쪽, 남쪽, 동쪽과 서쪽 지점에 포인터 "위상 적 (topologic)"모델.

class Point 
{ 
    private: 
      double lat; 
      double lon; 
      Point *north; 
      Point *south; 
      Point *east; 
      Point *west; 
      ... 
}; 

class Meridian 
{ 
    private: 
      double longitude; 
      Point *start; 
      Point *end; 
      unsigned int points_total; 
}; 

class Parallel 
{ 
    private: 
      double latitude; 
      Point *start; 
      Point *end; 
      unsigned int points_total; 
}; 

장점 :

  • 우리는 그 반대의 경우도 마찬가지 남북 방향으로 각각의 자오선을 통과 할 수 있습니다. 우리는 동서 방향으로 각각의 평행선을 횡단 할 수 있고 그 반대도 마찬가지입니다.
  • 각 포인트가 자오선 또는 병렬 (포인터 사용)인지 여부를 결정합니다.
  • 작은 저장 요건 ...

단점 : 모든 자오선/병렬 포인트

  • 순차 액세스 복사 생성자와 함께 오퍼레이터 =
  • 문제. 포인트 세트의 사본은 여러 단계로 수행되어야합니다 : 포인트의 새로운 인스턴스 생성, std :: map을 사용하여 포인트 간의 위상 관계 추가, 자오선/병렬의 엔드 포인트 변경 ... 이것은 다소 느립니다 ...

두 번째 단점은 모델을 포기하게 만들었습니다.

B) 포인트 목록. 자오선/병렬 저장 점 목록, 위상 관계가 없습니다.

class Point 
{ 
    private: 
      double lat; 
      double lon; 
}; 

class Meridian 
{ 
    private: 
      double longitude; 
      std::vector <Point> points; 
}; 

class Parallel 
{ 
    private: 
      double latitude; 
      std::vector <Point> points; 
}; 

장점 :

  • 우리는 그 반대의 경우도 마찬가지 남북 방향으로 각각의 자오선을 통과 할 수 있습니다. 우리는 동서 방향으로 각각의 평행선을 횡단 할 수 있고 그 반대도 마찬가지입니다.
  • 복사 생성자 및 연산자에 문제 없음 =
  • 모든 지점에 순차적으로 직접 액세스 할 수 있습니다.

단점 :

  • 우리는 각 점은 어떤 자오선/병렬 (하여 포인터) 여부에 속하는지 여부를 결정할 수있다.
  • 더 큰 저장 요구 사항. 어떤 시점에서
  • 우리는

마지막 단점은 모델의 포기로 이어질 수 ... 우리는 포인터가없는 자오선/병렬의 이전/다음 지점을 찾을 수없는 나를 리드 토폴로지 모델의 변형 된 변형에 대해 생각해보십시오 ....

몇 가지 공간 시뮬레이션을 수행하고 여러 카토 그래픽 프로젝션으로 결과를 나타내므로 효율적인 데이터 저장이 매우 중요합니다.

누군가 더 나은 모델을 제안 할 수 있습니다. 귀하의 답변을 주셔서 감사합니다 ...

답변

1

지구의 곡면에 자오선과 평행 물을 저장하는 경우, 계산 지오메트리에서 사용 된 일부 데이터 구조를 살펴보고 닫힌 2 차원 물체를 나타낼 수 있습니다. 차원 다기관. quad-edge 또는 winged-edge과 같은 구조는 새 가장자리 추가 또는 제거로 쉽게 업데이트 할 수있는 방식으로 주어진 가장자리, 점 또는 섹터에 가까운 가장자리, 점 또는 섹터를 빠르게 검색 할 수 있도록 특별히 설계되었습니다. 나는 이것이 당신의 특정 어플리케이션에서 얼마나 유용 할 지 모르겠다. 그러나 나는 그것들이 좋은 출발점이 될 것이라고 생각한다. C++에서 온라인으로 이러한 구조를 구현하는 것은 분명 좋은 일이지만, 필자는 머리 꼭대기를 알지 못합니다.