Math.Atan2의 재발견

지평좌표계로 변환할 때, 방위각을 계산하면 다음과 같다.

Public Function GetAzimuthRadian(ByVal x As Single, ByVal y As Single) As Single
'천구상의 방위각을 계산한다.
'이 때 방위각은 y축의 양의 방향을 기준으로 시계방향으로 잰각
'즉, 시각좌표계에서 사용해야 함.
'
'1) 특수한 경우의 방위각 계산
If Math.Abs(x) < Single.Epsilon Then
If y > 0 Then
Return 0.0F '--> 예) (0,1)의 방위각은 0도
Else
Return Math.PI '--> 예) (0,-1)의 방위각은 180도
End If
End If
'
If Math.Abs(y) < Single.Epsilon Then
Return Math.Sign(x) * Math.PI / 2 '--> 예) (1,0)은 90도, (-1,0)은 -90도
End If
'
'2) 일반적인 경우의 방위각 계산
Dim v1 As Single = Math.Atan(Math.Abs(x / y))
If y > 0 Then
Return Math.Sign(x) * v1 '--> 예) (1,1)은 45도, (-1,1)은 -45도
Else
Return Math.Sign(x) * (Math.PI - v1) '--> 예) (1,-1)은 135도, (-1,-1)은 -135도
End If
'
End Function


If문에서 발생할 확률이 더 많은 것을 전진배치하면, 다음과 같이 된다.

Public Function GetAzimuthRadian(ByVal x As Single, ByVal y As Single) As Single
'천구상의 방위각을 계산한다.
'이 때 방위각은 y축의 양의 방향을 기준으로 시계방향으로 잰각
'즉, 시각좌표계에서 사용해야 함.
'
If Math.Abs(x) >= Single.Epsilon Then
If Math.Abs(y) >= Single.Epsilon Then
'2) 일반적인 경우의 방위각 계산
Dim v1 As Single = Math.Atan(Math.Abs(x / y))
If y > 0 Then
Return Math.Sign(x) * v1 '--> 예) (1,1)은 45도, (-1,1)은 -45도
Else
Return Math.Sign(x) * (Math.PI - v1) '--> 예) (1,-1)은 135도, (-1,-1)은 -135도
End If
Else
'1) 특수한 경우의 방위각 계산
Return Math.Sign(x) * Math.PI / 2 '--> 예) (1,0)은 90도, (-1,0)은 -90도
End If
Else
'1) 특수한 경우의 방위각 계산
If y > 0 Then
Return 0.0F '--> 예) (0,1)의 방위각은 0도
Else
Return Math.PI '--> 예) (0,-1)의 방위각은 180도
End If
End If
'
End Function


이보다 더 간단히 정리하면 다음과 같다.

Public Function GetAzimuthRadian(ByVal x As Single, ByVal y As Single) As Single
'천구상의 방위각을 계산한다.
'이 때 방위각은 y축의 양의 방향을 기준으로 시계방향으로 잰각
'즉, 시각좌표계에서 사용해야 함.
'
Return Math.Atan2(x, y)
'
End Function

크리에이티브 커먼즈 라이센스
Creative Commons License

Posted by 솔라뷰

2008/12/31 10:43 2008/12/31 10:43
, ,
Response
No Trackback , No Comment
RSS :
http://www.solarview.net/rss/response/224

사진을 찍다 보면, 곧게 뻗어야 할 건축물의 모서리가 휘어져 찍힌다든지 둥글게 찍히는 경우가 많이 있다. 즉, 찍힌 사진이 광학적으로 왜곡된 경우을 보게 된다. 이를 보정하는 방법은 여러 가지가 있다. 여기 그 몇 가지를 소개하고자 한다.

  1. http://www.astrosurf.com/buil/us/iris/iris.htm)
    - 공개용 (원래 천체사진이미지처리 프로그램 IRIS)
    - 어안렌즈의 왜곡을 처리하는 기능이 있음
  2. RectFish : http://www.acapixus.dk/software/rectfish/index.htm
    - 어안렌즈 왜곡 보정하는 프로그램 (공개용)
  3. 왜곡보정 설명 http://www.bythom.com/distortion.htm
  4. 왜곡보정 http://webuser.hs-furtwangen.de/~dersch/
  5. 왜곡보정 http://www.andromeda.com/
  6. PanoTools : http://www.panoguide.com/products/dersch/panotools/


외국 사진 사이트

http://photo.net
http://www.the-digital-picture.com/Reviews/

크리에이티브 커먼즈 라이센스
Creative Commons License

Posted by 솔라뷰

2008/10/23 08:35 2008/10/23 08:35
, , , , ,
Response
No Trackback , No Comment
RSS :
http://www.solarview.net/rss/response/204

형태계수 검증

투영법 버전과 벡터 버전 모두 형태계수에 대한 검증을 했다.
크리에이티브 커먼즈 라이센스
Creative Commons License

Posted by 솔라뷰

2008/03/13 04:30 2008/03/13 04:30
,
Response
No Trackback , No Comment
RSS :
http://www.solarview.net/rss/response/191

북방지시화살표를 추가

화살표도 도면정보와 마찬가지로 변환할 수 있도록 함. 변환에 따른 향을 언제나 정확하게 전달하기 위함임.
크리에이티브 커먼즈 라이센스
Creative Commons License

Posted by 솔라뷰

2008/02/18 10:19 2008/02/18 10:19
,
Response
No Trackback , No Comment
RSS :
http://www.solarview.net/rss/response/188

그림자 추가

그림자는 기본적으로 오블리크 투영(oblique projection)이다.
건물 정보를 oblique projection하면 그림자의 모양이 완성되는 것이다.
크리에이티브 커먼즈 라이센스
Creative Commons License

Posted by 솔라뷰

2008/02/18 09:17 2008/02/18 09:17
,
Response
No Trackback , No Comment
RSS :
http://www.solarview.net/rss/response/187