2013-07-07 3 views
0

나는 수직면에 여러 개의 점이 있습니다. 사실이 비행기 은 정확히 수직이어야합니다. 그러나 점 구름을 시각화하면 수직 성에서 약간 경사가 (거의 2도) 있습니다. 지금은 이 성향 만 계산할 수 있습니다. 다른 오류에 대해서는 교대 또는 그와 같은 것이 없다고 가정합니다.내 비행기가 수직이 아닙니다. 수직면에 점 구름의 좌표를 업데이트하는 방법

그래서, 나는 그들이 수직면에 눕혀 내 포인트 데이터의 좌표를 업데이트합니다. 제 생각에는, 나는 어떤 종류의 변형을해야합니다. X 축을 따라 회전하는 것만 가능합니다. 그것이 무엇이 될지 확실하지 않습니다.

제 질문을 이해했습니다. 솔직히, 나는 가난하다. 수학. 정확한 좌표계에 좌표 점 좌표 을 업데이트하는 방법을 알려주십시오.

참고 : 저는 이것을 C++로 구현하고 있으며 이러한 것들에 대한 지식이 많은 프로그래머가 있으므로 C++에서이 질문을 게시하고 있습니다.

UPDATES

내가 지금까지했던 정확하게 말한다면; 수직 오브젝트와 그 주변 물건을 나타내는 점 구름 데이터가 있습니다. (데이터는 움직이는 스캐너에 의해 수집되며 정확한 세계 축과 축의 편차가있을 수 있습니다). 문제는 데이터에 오류가 있다는 것을 정확하게 말할 수 없다는 것입니다. 따라서 수직 평면 개체 (내 데이터에서 가장 많이 사용되는 개체)를 사용하여이를 확인했습니다. 실제로 비행기는 정말로 수직입니다. 그러나 외계인을 제거하여 비행기에 맞을 때 그 비행기는 실제로 수직이 아니며 거의 2도 경사가 있습니다. 따라서 데이터에 오류가있는 것으로 의심됩니다. 그래서 저는 평면상의 특정 포인트를 정확하게 수직 평면에 배치하는 방법으로 모든 포인트 클라우드 (비행기상의 포인트와 다른 오브젝트를 나타내는 포인트 포함)를 업데이트하려고합니다. 그렇다면 현실과 마찬가지로 모든 포인트가 올바른 위치로 업데이트 될 것입니다. 그것은 모든 (x, y, z) 좌표가 업데이트되어야한다는 것입니다.

예를 들어 아래 그림을 참조하십시오. enter image description here

왼쪽은 원래의 점 구름을 나타냅니다 (포인트 자체는 수직이 아닙니다.) 백 라인은 내가 맞는 수직 평면을 알려주고 빨간색은 제니스 선입니다. 보시다시피, 수직면의 경사가 있습니다. 그래서 전체 데이터를 오른쪽 그림으로 업데이트하고 싶습니다. 그 다음, 만약 내가 비행기에 다시 적합하다면 (외계인 제거), 천정 라인과 정확히 평행을 이룬다. 도와주세요.

답변

0

(참고의 요점에 도착), 희망이 답변이 당신을 도울 것입니다. 내가 알아야 할 다른 것이 있으면 말해줘.

이제 무엇인가를 회전하려면 회전 할 중심점이 있어야합니다. 이제는 이미 각도를 감지 할 수 있었으므로 원점을 중심으로 한 각도만큼 회전하는 공식이 필요합니다. 또한이 문제는 2D 평면에서만 발생하므로이 기본 수식을 사용하여 점을 다시 조정할 수 있습니다. 임의의 두 개의 축 x와 y의 경우 :

세타는 반 시계 방향으로 회전한다 주위의 각도이다. x '와 y'는 새로운 포인트입니다. x.origin과 y.origin은 주위를 돌아볼 지점의 좌표입니다. 이제는 내 수학이 100 % 맞는지는 모르지만 그렇지 않다면 잘하면 두세 가지를 바꿀 수 있고 효과가있을 것입니다.

+0

감사합니다. 괜찮을 것 같습니다. – gnp

1

내가 최근에 비행기에서 일한 것을 고려해 볼 때 내가 도울 수 있습니다. 우선, 어떻게 포인트가 이동과 동일 평면 상에 있지 않은 것입니까? 나는 처음부터 동일 평면에있는 점들을 (어떤 원점으로부터?) 기울여 놓고 그 점들을 고쳐야하는 대신에 동일 평면 상에 놓을 것입니다. 또한 첫 번째 점에서 동일 점을 동일 평면 상에두면 효율이 향상됩니다.

죄송합니다. 원하지 않는 답변이지만 죄송합니다. 도움을 요청하기 전에 자세한 정보가 필요합니다. 또한 3D 수학은 어렵습니다. 충분히 작업하면 머리 속으로 두드려지기 시작합니다. 특히 두려움을 겪었다면 잊지 않을 것입니다.

1

나는 그것에 대해 약간의 생각을했고, x 축을 따라 회전하고자하므로 xz 평면에서 회전이 이루어 지므로 2D 문제가 될 수 있습니다. Wikipedia에 대한 약간의 연구를 한 후에, 이것이 당신의 해결책 일 것입니다. 우리가 만들 수 있도록

new z = ((x - intended x) * sin(angle)) + (z * cos(angle)) + intended x 

내가 여기서 뭘하고있어, 현재의 x 값에서 우리의 목적 x 값을 뺀한다 (목적 X, 0) 원산지 우리의 관점은 약 회전합니다. 점이 회전 된 후에 올바른 결과를 얻을 수 있도록 좌표에 (의도 된 x, 0)을 다시 추가합니다.

+0

귀하의 빠른 답변과 친절함에 감사드립니다. 예, 문제가 며칠 내게 상처를 입히고 제 일을 더 이상 할 수 없습니다. 따라서 명확한 아이디어를 얻으려면 게시글을 다시 업데이트해야합니다. 자, 내가 뭘해야하는지 정확히 말해 줄 수 있다고 생각합니다. (불편을 끼쳐 드려 죄송합니다.) – gnp

+0

나는이 질문에 답변하기 위해 불편을 끼쳐 드려 죄송합니다. 그것이 바로이 곳입니다. 많은 사람들이 프로그래밍 문제로 다른 사람들을 돕는 데 시간을 할애합니다. –

1

당신이 당신의 포인트를 얻은 곳 (어떤 종류의 측정, 나는 짐작합니다)과 당신이 그들과 함께하고 싶은 것에 따라, 당신이 당신의 데이터로 할 수있는 몇 가지 다른 것들이 있습니다.

검색 키워드 "회귀 평면"이 도움이 될 수 있습니다 - 점 구름을 근사하는 평면을 찾는 여러 가지 방법과 점을 평면에 스냅하는 여러 가지 방법이 있습니다.

편집 : 당신은 당신의 회귀 평면의 법선 벡터와 원하는 평면의 정상의 외적에 의해 정의 된 축을 중심으로 회전을 적용 할 및 지점 선택. 당신의 그림에서 나는 당신이 아마 당신의 수직 평면 객체의 바닥이 회전을위한 기준점이되기를 원한다고 생각합니다.

이제 참조 할 지점이 생겼으니 회전하려는 축과 각도를 알 수 있습니다. 당신이 할 필요가있다 :

  1. 번역 내가 다시 질문을 읽어
  2. 회전
+0

의견을 보내 주셔서 감사합니다. 게시물을 업데이트했으며 지금 내 데이터의 실제 상황을 이해할 수 있다고 생각합니다. 네가 나에게 말해 줄 수 있기를 바란다. – gnp

관련 문제