주소 : http://geomalgorithms.com/a01-_area.html
설명 : 삼각형을 비롯하여 평면다각형(planar polygon)의 면적을 계산하는 방법을 기술한 웹페이지이다. 계산 방법에 따라 계산량과 계산속도가 많이 차이가 난다. 일반적인 방법에서부터 계산 속도가 빠른 방법도 제시하고 있다.
[프로그램등록] SolarView
일조, 일사, 조망을 분석하는 프로그램인 SolarView를 등록하였다.
Math.Atan2의 재발견
지평좌표계로 변환할 때, 방위각을 계산하면 다음과 같다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
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문에서 발생할 확률이 더 많은 것을 전진배치하면, 다음과 같이 된다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
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 |
이보다 더 간단히 정리하면 다음과 같다.
1 2 3 4 5 6 7 8 |
Public Function GetAzimuthRadian(ByVal x As Single, ByVal y As Single) As Single '천구상의 방위각을 계산한다. '이 때 방위각은 y축의 양의 방향을 기준으로 시계방향으로 잰각 '즉, 시각좌표계에서 사용해야 함. ' Return Math.Atan2(x, y) ' End Function |
왜곡된 카메라 이미지 처리 (correcting optical distortion)
사진을 찍다 보면, 곧게 뻗어야 할 건축물의 모서리가 휘어져 찍힌다든지 둥글게 찍히는 경우가 많이 있다. 즉, 찍힌 사진이 광학적으로 왜곡된 경우을 보게 된다. 이를 보정하는 방법은 여러 가지가 있다. 여기 그 몇 가지를 소개하고자 한다.
- http://www.astrosurf.com/buil/us/iris/iris.htm)
– 공개용 (원래 천체사진이미지처리 프로그램 IRIS)
– 어안렌즈의 왜곡을 처리하는 기능이 있음 - RectFish : http://www.acapixus.dk/software/rectfish/index.htm
– 어안렌즈 왜곡 보정하는 프로그램 (공개용) - 왜곡보정 설명 http://www.bythom.com/distortion.htm
- 왜곡보정 http://webuser.hs-furtwangen.de/~dersch/
- 왜곡보정 http://www.andromeda.com/
- PanoTools : http://www.panoguide.com/products/dersch/panotools/
외국 사진 사이트
http://photo.net
http://www.the-digital-picture.com/Reviews/
형태계수 검증
투영법 버전과 벡터 버전 모두 형태계수에 대한 검증을 했다.
북방지시화살표를 추가
화살표도 도면정보와 마찬가지로 변환할 수 있도록 함. 변환에 따른 향을 언제나 정확하게 전달하기 위함임.
그림자 추가
그림자는 기본적으로 오블리크 투영(oblique projection)이다.
건물 정보를 oblique projection하면 그림자의 모양이 완성되는 것이다.