2017-10-13 25 views
-1

전이 질문을 게시했지만 생각보다 빨리 설명했습니다. 신통치 않게. 본질적으로, 사용자가 지정한 점 (0,0,0)과 점 (Y1, Y2, Y3)으로 묶인 영역 내부에 크기가 포함 된 모든 가능한 점 집합을 생성하려면 다음과 같이 설정 값을 m으로 설정합니다. 증가분.C++ max/min x/y/z 값, n 세트의 점 수 및 증가 할 m 값이 주어진 모든 가능한 점 집합을 생성하려고 시도했습니다.

예를 들어, 발생 된 지점 세트 (각 행이 설정되는) 것이다 (1,1,1) n이 3 인 경우, m은 1이고, (Y1은 Y2가, Y3)은이다

(0, 0, 0) & (0, 0, 0) & (0, 0, 0) 
(0, 0, 0) & (0, 0, 0) & (0, 0, 1) 
(0, 0, 0) & (0, 0, 0) & (0, 1, 0) 
(0, 0, 0) & (0, 0, 0) & (0, 1, 1) 
(0, 0, 0) & (0, 0, 0) & (1, 0, 0) 
(0, 0, 0) & (0, 0, 0) & (1, 0, 1) 
(0, 0, 0) & (0, 0, 0) & (1, 1, 0) 
(0, 0, 0) & (0, 0, 0) & (1, 1, 1) 
(0, 0, 0) & (0, 0, 1) & (0, 0, 0) 
(0, 0, 0) & (0, 0, 1) & (0, 0, 1) 
(0, 0, 0) & (0, 0, 1) & (0, 1, 0) 
(0, 0, 0) & (0, 0, 1) & (0, 1, 1) 
(0, 0, 0) & (0, 0, 1) & (1, 0, 0) 
(0, 0, 0) & (0, 0, 1) & (1, 0, 1) 
(0, 0, 0) & (0, 0, 1) & (1, 1, 0) 
(0, 0, 0) & (0, 0, 1) & (1, 1, 1) 

....... 

(1, 1, 1) & (1, 1, 1) & (1, 1, 1) 

이것은 처음에 시도한 것이지만 실제로는 각 개별 점에 대해 원하는 작업을 수행하고 올바른 전체 집합을 찾지 못합니다 (pointset은 주 프로그램에서 이미 생성 된 크기 n의 점 개체 벡터입니다. 각 점은 (0,0,0)으로 초기화 됨) :

void allPoints(double Y1, double Y2, double Y3, double precision, vector<Point> pointset) 
{ 
int count = pointset.size()-1; 

while (count>=0) 
{ 
    while (pointset.at(count).getX()<Y1) //runs through every possible rectangle within rectangle created by given point Y and origin 
    { 
     while (pointset.at(count).getY()<Y2) 
     { 
      while (pointset.at(count).getZ()<Y3) 
      { 
       // insert formula to test each set with here 
       pointset.at(count).incZ(precision); 

      } 
      pointset.at(count).setZ(0); 
      pointset.at(count).incY(precision); 
     } 
     pointset.at(count).setY(0); 
     pointset.at(count).incX(precision); 

    } 
    count--; 
} 


} 

다음 단계로 넘어갈 수 있으며 중복 된 점들을 포함한다. 결국 나는 특정 공식으로 각 포인트 세트를 테스트 한 다음 모든 결과 값을 비교할 것이지만이를 수행하는 방법을 알고 있습니다.

저는 기본적인 Java/C++ 환경 만 가지고 있으며 올바른 루프를 작성하는 데 어려움을 겪고 있습니다. 해결책은 비슷하지만 지금은 빠뜨린 것 같아요. 이 상황에서 점 개체의 벡터를 사용하고 싶습니다.

올바른 방향으로 나를 도와 주시면 감사하겠습니다.

+0

스택 오버플로는 소프트웨어 문제를 다룹니다. 아직 소프트웨어 문제에 도달하지 않았으므로 불이익을 당하고 있습니다. 당신은 "이것은 나의 계획이다, 누구든지 그것에 문제가 있습니까?"라고 게시 할 수 있습니다. 질문을 던지거나 다음과 같이 게시 할 수 있습니다. "문제를 해결할 수있는 다음 연구를 통해 문제가 해결되지 않았습니다. 다음에 어디서 조사해야합니까?" – user4581301

답변

0

정확하게 이해했다면 기본 Y1, Y2, Y3을 사용하고 결과를 저장하므로 숫자가 std::list<unsigned short[3]>이고 크기가 10 인 것으로 계산할 수 있습니다 (Y1, 행을 0으로 재설정하고 다음 행을 1로 설정하십시오. int [3]이 꽉 차면 당신은 그것을 비우고 다음 int [3]로 가야한다는 것을 알게됩니다.

루프의 모든주기에서 값을 증가시키고 base에 도달하면 재설정하고 다음 값을 증가시키는 countBase(const unsigned short& base) 함수가 필요합니다. 목록의 모든 값이 Y1, Y2 또는 Y3 일 때 프로그램이 종료됩니다.

이 작업으로 무엇을 할 계획인지 알 수는 없지만 루프를 실행할 때마다 std :: list의 상태를 저장할 수 있습니다.

무슨 일을하는 것은 거의 자신의 이상한 기준에 계산하고 결과를 저장 같고, 열심히하지 않을 것을 잊지 마세요

당신의 편집을보고 한 후 [편집] , I 분명히 단 하나의 루프, ushort [3]의 컨테이너를 사용해야한다고 생각하고 base까지 증가시켜 결과를 유지하는 방법을 찾으면 훨씬 쉽게 읽을 수있을 것이고, 원하는 것을 정확하게 제공해야합니다. .

[편집] std :: list를 사용하는 것이 더 빠를 것이라고 생각합니다.이 종류의 프로젝트에는 아마도 약간의 퍼포먼스가 필요할 것입니다.