균일하게 배치 된 3D 그리드에 대한 좌표 (x, y, z)가 있습니다. 임의의 3D 점 (x, y, z)이 그리드의 어딘가에 주어진다면, 그 점을 갖는 큐브를 찾는 방법. 나는 큐브의 8 코너를 알아야합니다.
나는 벡터의 벡터 목록에 격자 점 데이터를 가지고있다. ++.3D 그리드에서 임의의 점이있는 큐브의 코너 점을 찾습니다.
감사합니다.
균일하게 배치 된 3D 그리드에 대한 좌표 (x, y, z)가 있습니다. 임의의 3D 점 (x, y, z)이 그리드의 어딘가에 주어진다면, 그 점을 갖는 큐브를 찾는 방법. 나는 큐브의 8 코너를 알아야합니다.
나는 벡터의 벡터 목록에 격자 점 데이터를 가지고있다. ++.3D 그리드에서 임의의 점이있는 큐브의 코너 점을 찾습니다.
감사합니다.
모든 dimentions 그리드 큐브에 대한 동일한 길이를 가정하면, (i를 gx
이 gy
, gz
그리드 큐브입니다
gx = x - x%l;
gy = y - y%l;
gz = z - z%l;
가 ORIGO에 가장 가까운 좌표를 계산하여 ORIGO을 OHE에 가장 가까운 좌표를 얻을 수 있습니다 여기서 x
, y
, z
> = 0으로 가정), %
은 모듈러스 연산자이고 l
은 격자 큐브의 길이입니다.
참고 :
(gx, gy, gz)
(gx+l, gy, gz)
(gx, gy+l, gz)
(gx, gy, gz+l)
(gx+l, gy+l, gz)
(gx+l, gy, gz+l)
(gx, gy+l, gz+l)
(gx+l, gy+l, gz+l)
gx = static_cast<int>(x)/l*l;
그런 다음에 속하는 (x, y, z)
그리드 큐브의 8 개 코너는 (static_cast<>
이 정수가 아닌 x
를 고려하여) : 당신은 계산뿐만 아니라이 방법을 수행 할 수 있습니다
그리드의 원점이 (0,0,0)
이라고 가정하면 (x,y,z)
을 그리드 크기로 나눠야합니다. 는 그런 다음 그 결과를 반올림 그리드의 크기를 곱해야한다, 즉 : n<=x
은 (실제로, 당신은 단지 부동 소수점의 결과를 캐스팅해야 있도록 [x]
가 가장 큰 정수 n
입니다
(nx, ny, nz) = [(x,y,z)/grid_size] * grid_size
조작을 int
으로). 검색중인 포인트는 다음과 같습니다.
(nx, ny, nz)
(nx+grid_size, ny, nz)
(nx, ny+grid_size, nz)
(nx, ny, nz+grid_size)
(nx+grid_size, ny+grid_size, nz)
(nx+grid_size, ny, nz+grid_size)
(nx, ny+grid_size, nz+grid_size)
(nx+grid_size, ny+grid_size, nz+grid_size)