2014년 12월 24일 수요일

Visual C# (1) sin과 cos을 이용한 원 그리기 프로그램



요즘 회사 프로젝트 때문에 새롭게 visual c#을 공부하고 있습니다. 제가 공부하면서 작성하는 코드를 하나씩 포스팅 해보도록 하겠습니다. 참고로 저는 학부 때 c를 이용해서 기본적인 전산물리 문제를 풀어 본 경험이 있습니다.

아직 저도 배우는 단계라 하나씩 하나씩 수정 해 나가면서 프로그램을 계속 개선해 나가겠습니다.


우선은 sin 과 cos을 이용하여 원을 그리는 프로그램 입니다.

아주 단순한 코딩임에도 불구하고 제가 원하는 방식의 코드가 예상외로 찾기 힘들었습니다. 그래서 몇 가지 사이트를 참조해서 단순하게 새로 코딩을 하였습니다.

 제가 원하는 기능은 sin과 cos을 이용하여 원을 그리는 것인데, 단순히 원 테두리만 그리는 것이 아니라 안이 채워진 형태로 그리고자 했습니다.


 원을 그리는 방법은 다음의 사이트를 참조했습니다.

http://hhjae84.tistory.com/50
http://www.dreamincode.net/forums/topic/164701-drawing-shapes-with-sin-cos-values/




 제가 원하는 기능은 sin과 cos을 이용하여 원을 그리는 것인데, 단순히 원 테두리만 그리는 것이 아니라 속이 채워진 형태로 그리고자 했습니다. 이렇게 그리기 위해서 ellipse를 사용할 수도 있지만 이렇게 그리게 되면 theta에 따른 변화를 줄 수가 없어 배제 하였습니다.



x=R*cos(theta)
y=R*sin(theta)

위의 단순한 수식을 이용하였습니다. R은 원의 반지름이 입니다.

제가 원을 그린 방식은 원점을 지정하고 원점으로부터 거리가 R인 지점까지 일정한 theta만큼 변화시키며 선을 긋는 방식입니다. 사실 엄밀히 말하면 무수히 많은 선을 방사형으로 긋는 것인데 theta의 변화량이 점차 작아짐에 따라 원에 가까워지는 원리를 이용하였습니다. 이 방법은 추후에 변경해야 할지도 모르지만 현재론 이 방법이 제가 원하는 쓰임새엔 가장 근접한 것 같습니다.








다음은 실행 결과입니다.










-------------------------------------------------------------
[참고]
30도 간격으로 선을 그을 때



10도 간격으로 선을 그을 때



5도 간격으로 선을 그을 때


1도 간격으로 선을 그을 때

댓글 없음:

댓글 쓰기