2011. 4. 5. 11:13

가끔은 3차원공간을 논리적으로 표현할 일이 있는데 이럴때 점A와 점D의 최단거리가 필요한 경우가 많습니다.

 

3차원 공간에서의 대각선 길이


여기서 말하자고 하는것은 AD의 길입니다.

육면체의 대각선 길이를 구하는 공식은
√(a^2+b^2+c^2)
이저.
문제는 이너므 루트라는 녀석은 '제곱근'이란 녀석으로 √2 라고 하면 제곱해서 2가되는 숫자를 말하는 것입니다.
구하기 힘든값이라는거저-_-;;;

그래서 공학용계산기를 추천합니다. ㅡ.-;;
어찌됬건 AD의 길이를 구하려면
√(AB^2+BC^2+CD^2)
입니다 ㅡ,.ㅡ;

프로그래밍 할때는 변수를 쓸때 최대한 2차원배열이하로 사용하려고하지만 가끔 3차원으로 그것도 하나의 좌표와 다른좌표간의 거리를 재야 하는 경우가 있습니다. 말그대로 미치는거저-_-;;;
그래도 다행인게 우리에게는 함수가있습니다!!!

Sqrt()란녀석인데 제곱근값을 구할때 씁니다.(.NET)
이녀석은 Math라는 클레스에 들가있는 녀석이니 인포트를 하던 점(.)을 쓰던 불러와서 쓰면 되저.

'루트값을 구해주는 함수  
sqrtPublic Shared Function Sqrt(ByVal d As Double) As Double

보면알겠지만 더블로 읽어들여 더블로 반환하지만.....VB에서와 같이(.NET로 넘어왔어도 그 특성은 그대로입니다. ㅎㅎ) 자동으로 변수를 더블로 바까줍니다.(효율은?...OTL)

루트값치고 정수로 딱떨어지는 경우는 그리 많지 않습니다 ㅡ,.ㅡ;;
그러니 필요에 따라 반올림을 하던 올림을 하던 버림을 하던 해야 하저;;

그러나 다행인점은 한좌표에서 다른 좌표간의 길이를 젤때는 항상 양수로만 구한다는 것입니다.
좌표가 10,10,10 인점에서 5,5,5 인점의 길이를 구한다고 해서 길이가 마이너스(-)가되진 안저.
다시말해 항상 좌표는 양수로 바까서 계산해도 된다는 것입니다.

'절대값을 구할때 쓰는 함수 
ABSPublic Shared Function Abs(ByVal value As System.SByte) As System.SByte

결론!!!
프로그래밍할때 계산식은 요렇게 됩니다.
시작좌표는 x,y,z 끝좌표는 x2,y2,z2로 하겠습니다.

Sqrt(Abs(x - x2) ^ 2 + Abs(y - y2) ^ 2 + Abs(z - z2) ^ 2)



그러나!!! 당신은 낚인겁니다!!
우리는 코드짜는데 너무 신경쓴 나머지 중요한 사실 하나를 관과 하고 있었습니다.....

바로 모든 수는 제곱하면 양수가됩니다. ㅡ,.ㅡ;;;(이건 제기억으로 초딩때 배웠습니다;;)
제곱이란 말자체가 값에 값을 곱한다는 이야기인데....
+ * + = +
- * - = +

...

이런짓하다보면 가끔 까먹으니 조심을 ㅎㅎ;;


Sqrt((x - x2) ^ 2 + (y - y2) ^ 2 + (z - z2) ^ 2)
AD = √(AB^2+BC^2+CD^2)