2010-04-20 5 views
5

3D에서 점과 선분 사이의 평균 거리를 계산하는 알고리즘을 찾고 있습니다. 따라서 선분 AB와 세 번째 점 C (x3, y3, z3)를 나타내는 두 점 A (x1, y1, z1)와 B (x2, y2, z2)가 주어 졌을 때 AB의 각 점 사이의 평균 거리는 얼마입니까? C를 가리 키기 위해?점 세그먼트와 선분에서 선분까지 평균 거리 계산

두 개의 선분 사이의 평균 거리에도 관심이 있습니다. AB와 CD가 주어진다면, AB의 각 점에서 CD의 가장 가까운 점까지의 평균 거리는 얼마입니까?

나는 웹 검색에 어떤 행운을 보지 못했기 때문에 어떤 제안이라도 감사 할 것입니다.

감사합니다.

+1

이것을 계산하려는 이유가 무엇인가요? 흔하지 않은 계산 인 것 같아서 그다지 간단하지 않습니다. 그게 니가 원하는거야? – brainjam

답변

1

"평균"(그리고 "거리", 즉 dreeves에서 언급 한 L2 표준)을 의미한다고 생각하면 라고 생각하면은 점과 점 사이의 평균 거리를 찾는데 적합합니다. 선분. 두 벡터의 내적을 취하는 함수 dot(A,B)이 필요합니다. 내가 제대로 모든 전사 한 가정

// given vectors (points) A, B, C 
K1 = dot(A-C,A-C) 
K2 = 2*dot(B-A,A-C) 
K3 = dot(B-A,B-A) 
L1 = sqrt(K3*(K1+K2+K3)) 
L2 = sqrt(K3*K1) 
N = 4*K3*L1 + 2*K2*(L1-L2) + (K2*K2-4*K1*K3)*log((K2+2*L2)/(2*K3+K2+2*L1)) 
D = N/(8*K3^1.5) 

, D는 평균 거리가 될 것입니다.

이것은 기본적으로 Mathematica에서 수행 한 적분 결과를 평가하기위한 의사 코드입니다. 거기에 몇 가지 깔끔한 계산 단축키가있을 수 있지만 거기 있다면, 나는 그것을 모른다. (그리고 만약 하나가 없다면 나는이 계산을 얼마나 많이 수행해야하는지에 대해 의문을 가질 것입니다.)

선분 CD의 가장 가까운 점에서 AB의 모든 점까지의 평균 거리를 찾으려면 대부분 가장 가까운 점은 C 또는 D가 될 것이므로 어느 것이 더 가깝게 보이는지 두 가지를 모두 확인할 수 있습니다 (다른 해답에서 참조 된대로 최소 거리 계산을 사용했을 가능성이 높음). 유일한 예외는 CD와 AB가 평행하고 하나에서 다른 방향으로 수직을 실행할 수있는 경우입니다.이 경우 요구 사항을보다 정확하게 정의해야합니다.

CD의 모든 점과 AB의 모든 점 사이의 평균 거리를 찾고 싶다면 두 배 적분으로 수행 할 수 있습니다. 그러나 결과 수식이 얼마나 복잡 할 지 생각합니다. 내가 너무 티카의 복사본이

글쎄, 분석이 실패 할 경우, 컴퓨터에 도달하고 숫자에 대한 느낌을 얻을 때까지 계산의 바보 같은 금액을

+0

감동 받았습니다, David! A, B, C의 상징적 인 요소를 계산하기 위해 Mathematica를 어떻게 얻었습니까? 불행히도 우리 중 하나가 특정 A, B, C에 대해 [Norm [(1-k) A + kB-C], {k, 0,1}]을 통합하기 위해 알고리즘을 비교할 때 오류가 발생했습니다. t 일치. 어떤 아이디어? – dreeves

+0

추신 : 저는 David의 알고리즘에 오류가 있다는 것을 확신합니다. 그러나 오류가 무엇인지 결정하기 위해 그가 한 일을 재현하는 방법을 알아 내지 못했습니다! – dreeves

+0

다음은 내가 한 일이다. 선분은'A + k (BA)'로 매개 변수화 될 수 있으므로'(A + k (BA) -C)^2'을 수동으로 평가하여'(AC)^2 + 2k (BA). (AC) + k^2 (BA)^2'. 저는 K1 = (AC)^2, K2 = 2 (BA). (AC), 그리고 K3 = (BA)^2를 설정하고 Mathematica에게 Integrate [Sqrt [K1 + K2 k + K3 k^2], {k, 0,1}]. –

2

먼저 두 점 사이의 거리는 좌표의 쌍 차이점의 제곱의 합계의 제곱근입니다. (예 : (0,0,0)에서 (1,1,1)까지의 거리는 sqrt (3)이지만 임의의 차원 수에서 임의의 점에 대해 작동합니다.) 이 거리는 l2-norm 소문자 L) 또는 유클리드 표준. 평균 거리의 흥미로운 문제의 점 A와 B.

간의 거리 쓰기 놈 (A, B)는 ... 는 (라인 또는 사이의 지점에서 최소 거리를 찾는 유의 그 문제에 대한 좋은 지적과 함께 여기에 답변이 있었지만 그 사이에 삭제 된 것 같습니다.)

지점 C에서 선분 AB까지의 평균 거리를 찾으려면, A와 B 사이의 임의의 점, 즉 (1-k) A + kB에서 k는 0에서 1까지의 거리를 고려하십시오. 이것은 norm (C, (1-k) A + kB)입니다. 따라서 평균 거리는 norm (C, (1-k) A + kB)의 k = 0에서 1까지의 적분입니다. 적분도 Norm[(1-k)*A+k*B-C]을 기록 할 수

avgd[A_,B_,C_] := Integrate[[email protected][(1-k)*A+k*B-C, (1-k)*A+k*B-C], {k, 0, 1}] 

:

티카는 특정 A, B 및 C

에 대한 그 통합을 할 수는 여기에 티카 구현입니다. 어쨌든, Mathematica는 특정 점에 대해 그것을 할 수는 있지만 그것을 상징적으로 통합 할 수는 없습니다. 이론적으로 난이 일을해야한다고 생각, 두 선분 사이의 평균 거리의 문제에 대한

> avgd[{0, 0, 0}, {4, 0, 0}, {4, 3, 0}] // N 

3.73594 

: 는 여기에 코멘트에서 다윗의 예입니다

avgd[A_,B_,C_,D_] := Integrate[Norm[(1-k)A+k*B - (1-j)C - j*D], {k,0,1}, {j,0,1}] 

을하지만 티카는 심지어 질식 할 것 같다 상징적 인 것은 말할 것도없고 특정 점에 대해서.

+1

흥미로운 방법, 설명/증거를 가르쳐 주시겠습니까? (나는 단지 호기심입니다) –

+0

... 그리고 이제는 그것에 대해 생각합니다. 나는 그 공식에 잘못된 것이 있다고 생각합니다. 'A = (0,0,0)','B = (4,0,0)','C = (3.99999999,3,0)'또는'C = (4.00000000130)' . 전자의 경우 첫 번째 수식 (D가 AB에있을 때)은 평균 거리가 3.5이지만 두 번째 수식의 경우 거리가 4가됩니다. (내 분석 계산 결과는 3.7359입니다.) –

+0

허튼 소리, 나는 증명을 스케치하기 시작했고 내가 틀렸다는 것을 알았습니다! 업데이트 대기 ... – dreeves

1

.... 사물을 단순하게 유지하려면 삼각형이 평면에 있어야하므로 2D 공간에서 다음을 수행했습니다. 좀 더 단순하게하기 위해 점을 {0,0}에 지정하고 라인 세그먼트를 {1,0}에서 {0,1}까지 지정합니다. 점에서 선까지의 평균 거리는 의미가 있다면 {0.0}에서 선분의 어느 곳으로나 그릴 수있는 모든 선의 평균 길이 여야합니다. 물론, 티카 10.이는 0.830255을 제공

Mean[Table[EuclideanDistance[{0, 0}, {1 - k, 0 + k}], {k, 0, 1, 10.0^-1}]]] 

로 계산 될 수있다,이 같은 라인의 끔찍한 많이 있습니다, 그래서 말하자면, 시작하자. 다음 단계는 분명합니다. 측정하는 선의 개수를 더 크게 만듭니다. 실제로, 10.0의 지수가 작아짐에 따라 평균 테이블을 만듭니다 (음수입니다). 매스 매 티카에서 :

Table[Mean[Table[EuclideanDistance[{0, 0}, {1 - k, 0 + k}], {k, 0, 1, 
10.0^-i}]], {i, 0, 6}] 

생산되는 :

Table[Mean[Table[EuclideanDistance[{0, 0}, {4, 0 + 3 k}], {k, 0, 1, 
10.0^-i}]], {i, 0, 6}] 

제공 :

{1, 0.830255, 0.813494, 0.811801, 0.811631, 0.811615, 0.811613} 

내가 데이브의 예 @ - 일 다시이 방법 (세 번째 차원을 잊지를) 다음

{9/2, 4.36354, 4.34991, 4.34854, 4.34841, 4.34839, 4.34839} 

이것은 @dreeves가 @ @ Dave의 알고리즘이 계산한다고 말하는 것과 함께하십시오.

편집 : 좋아, 그래서 이것에 대해 더 많은 시간을 낭비했습니다. I가 처음에 사용되는 간단한 예를 들어, 그 {0,0}에 점으로하고 {0,1}에서 {1,0}으로 연장되는 선분이 같은 (적으로) 매쓰의 함수를 정의

fun2[k_] := EuclideanDistance[{0, 0}, {0 + k, 1 - k}] 

을 이제 이것은 통합 가능합니다.오히려 번호를 원하는 경우,

In[13]:= Integrate[fun2[k], {k, 0, 1}] 

    Out[13]= 1/4 (2 + Sqrt[2] ArcSinh[1]) 

을 또는이 : 매스 매 티카가 제공

앞서 갔다 순수 수치 적 접근 방식이주는 것입니다
In[14]:= NIntegrate[fun2[k], {k, 0, 1}] 
Out[14]= 0.811613 

.

이제 다시 돌아와서 지점과 선분의 끝점으로 정의 된 임의의 삼각형을 일반화하기 위해 남겨 두겠습니다.

+0

마지막 예를 들어, 우리는 다른 거리를 계산하고 있다고 생각합니다. 내 의견에 나는 길이 4의 측면과 그 반대 정점 사이의 평균 거리에 대해 이야기하고 있었지만, 길이 3의 측면과 반대의 정점 사이의 평균 거리를 계산 한 것으로 보인다. 아마도 그 숫자가 일치하지 않는 이유가 될 것입니다. –

+0

@David - 예, 계산을 다시 할 때도 3.73594가됩니다. –