n 차원의 n 큐브를 나타내는 점 구름의 좌표를 나타내는 데이터를 생성하고 싶습니다. 이 점들은 n- 공간 전체에 고르게 분포되어야하며, 그 사이에 사용자가 정의한 간격으로 생성 할 수 있어야합니다. 이 데이터는 배열에 저장됩니다.C++ n 차원 튜플의 데카르트 곱 집합을 생성하는 방법
답변
나는 cartesian product using Boost.MPL의 구현을 발견했다.
Boost에는 실제 데카르트 제품이 있지만 전처리 지시어입니다.이 제품은 아무 쓸모가 없다고 가정합니다.
칭찬은 제 질문을 완전히 대답하지는 않지만 읽는 데 다소 유용한 예제입니다. – Ben
간단한 것을 유지하려면 여기에 일반 큐브의 예가 있습니다. 즉, 3 차원 인 큐브 예입니다. 한 변의 길이를 1로하고 점의 간격을 1/n으로 지정한다고 가정하십시오. (이것은 점의 균일 한 직사각형 분포로 이어지고 있으며 이것이 당신이 원하는 것이라고는 확신 할 수 없습니다.)
이제 일부 의사 코드 :이 아무것도의 데카르트의 제품이 아니라 당신의 기준 (의 특별한 경우)를 만족하는 것 같다for i=0;i<=n;i++ //NB i<=n because there will be n+1 points along each axis-parallel line
for j=0;j<=n;j++
for k=0;k<=n;k++
addPointAt(i/n,j/n,k/n) //float arithmetic required here
참고. 간격을 다르게하려면 루프 시작 및 끝 인덱스 또는 간격 크기를 조정하십시오.
더 높은 임의의 지정된 차원으로 이것을 일반화하려면 더 많은 루프를 추가하십시오.
런타임까지 알 수없는 더 높은 차원으로 일반화하는 것은 약간 더 어렵습니다. N 차원 배열을 선언하는 대신 동일한 수의 요소로 1 차원 배열을 선언하십시오. 그런 다음 컴파일러에서 대신 색인 산술을 작성해야합니다.
나는 이것이 당신이 원하는 것이 아니라고 당신에게 말할 것이라고 기대합니다! 그렇지 않으면 명확히 할 수 있습니다.
당신이 반복적으로 (의사) 할 수이것이 내가 원하는 것입니다.하지만 제가 쫓고있는 것은 특정 문제가 아니라 일반적인 해결책입니다. 이것은 내가 쫓고있는 것입니다. 친구가 나를 위해 질문을 수정했습니다. 3 차원 이상의 기하학에 대한 배경 지식이 없으므로 설명하기가 어려웠습니다. – Ben
@Ben : OK, 일반적인 해결책은 N-D 배열의 '평평한'표현 인 1-D 배열을 만드는 것입니다. –
나는 n 차원의 재귀를 구현하는 방법을 궁금해했다. 그래서 모든 n 차원에 대해 좌표를 생성하는 일반적인 방법이있다. 스스로를 호출하는 함수를 갖는 것은 내가 생각한 한 가지 방법 이었지만 이것은 불필요하고 지저분 해 보입니다. – Ben
:
Function Hypercube(int dimensions, int current, string partialCoords)
{
for i=0, i<=steps, i++
{
if(current==dimensions)
print partialCoords + ", " + i + ")/n";
else if current==0
Hypercube(dimensions, current+1, "("+i);
else
Hypercube(dimensions, current+1, partialCoords+", "+i);
}
}
당신은 그것을 전화 : (N, 0, "") 하이퍼 큐브를; 이렇게하면 모든 점의 좌표가 인쇄되지만 구조에 저장할 수도 있습니다.
- 1. 목록 사전의 데카르트 곱
- 2. n 차원 매칭 알고리즘
- 3. 특정 속성을 가진 고유 튜플의 목록을 생성하는 알고리즘
- 4. 날짜 집합을 생성하는 SQL
- 5. 평행 행렬 곱
- 6. 파이썬에서 n 차원 난수 생성
- 7. 하나의 데카르트 시스템을 다른 데카르트 시스템으로 변환하는 방법
- 8. N 입력에 대한 Banyan 네트워크를 생성하는 방법
- 9. C# 이동이 개 차원 배열 빠른 방법
- 10. 데카르트 제품으로 페이징
- 11. 행렬에서 행의 임의의 부분 집합을 효율적으로 생성하는 방법
- 12. C# 제네릭 집합을 구현하는 방법
- 13. 튜플의 반복을 통해
- 14. 두 배열의 데카르트 조인
- 15. 3 차원 점 집합을 시계 방향/시계 반대 방향으로 정렬
- 16. 스타 스키마 [사실 1 : n 차원] ... 어떻게?
- 17. N 차원 벡터에 액세스하려하지만 무한 재귀가 발생했습니다.
- 18. n 차원 지그재그 형 배열을 통과합니다.
- 19. C++의 2 차원 문자열
- 20. 두 개의 2D 벡터의 교차 곱
- 21. 자동으로 생성하는 방법 C++ 헤더
- 22. 형식화 된 데이터 집합을 생성하는 T4 템플릿
- 23. 버튼 및 데카르트 좌표
- 24. 그룹화가있는 데카르트 제품
- 25. C++ : 2 차원 배열 : 1 차원 고정?
- 26. C++에서 2 차원 배열을 반환하는 방법
- 27. 파이썬 : 튜플의 (마지막) 요소를 변경하는 방법?
- 28. 포인터가있는 C++ 2 차원 배열
- 29. C++에서 구조체 집합을 갖는 방법
- 30. 레코드 집합을 C#의 테이블로 변환하는 방법
이 숙제입니까? – Cetra
개인적인 이익이 아닙니다. – Ben