지식
 

지식 : 팁사용기   새글 5점 / 간단한 글 5점 / 답글 5점

 
  total 글수 2362
응용문제
hongjuny
조회수 : 2,023
댓글 1
2005-12-20 01:19:01

예전에 대입 학력고사에 본고사가 있던 시절, 서울대 본고사 문제에 나왔다는 전설의 그 문제! 사이클로이드라는 것이 있습니다. 이 예제는 사이클로이드와 똑같지는 않지만 대략 비슷한 원리입니다. 자전거 바퀴살에 불을 하나 달고 밤에 타고 간다면 그 불빛은 원을 그리며 앞으로 전진을 하겠지요? 그런데 그 불빛이 반드시 원은 아니고, 마치 어린 아이들이 낙서할 때 동그라미를 그리는, 중고딩 시절에 볼펜 스프링 주욱 잡아늘였을 때 보이는 그런 모양이 보이게 됩니다.

바로 그것을 그린 예제입니다. 그냥 그림만 그리면 재미없으므로 색상도 바꾸어 봅니다. 색상도 똑같이 바꾸면 재미 없으므로 RGB 각각 30도씩 위상차를 두어 바뀝니다. 그 결과 이렇게 재미있는 그림이 되었습니다.

Quartz 2D 의 색상을 바꾸는 방법, 선분을 그리는 방법 등등을 볼 수 있는 예제가 되겠습니다. ^^


OSStatus MyDraw( EventRef event, WindowRef window )
{
        
        OSStatus status = noErr ;
        CGContextRef myContext ;
        HIRect bounds ;
        double i ;
        double rv, gv, bv ;
        int px, py, ox, oy, innerrad = 100, outerrad = 150 ;
        
        status = GetEventParameter( event,
                                                                kEventParamCGContextRef,
                                                                typeCGContextRef,
                                                                NULL,
                                                                sizeof( CGContextRef ),
                                                                NULL,
                                                                &myContext ) ;
        require_noerr( status, CantGetGraphicsContext ) ;
        HIViewGetBounds( (HIViewRef) window, &bounds ) ;
        require_noerr( status, CantGetBoundingRectangle ) ;
        
        /////
        
        CGContextTranslateCTM( myContext, bounds.size.width / 2, bounds.size.height / 2 ) ;
        
        for( i = 0.0 ; i < 360.0 ; i+=0.01 ) {
                
                CGContextBeginPath( myContext ) ;
                
                rv = sin( ( i + 30.0 ) * 2 * M_PI / 180. ) / 2 + 0.5 ;
                gv = sin( ( i + 60.0 ) * 3 * M_PI / 180. ) / 2 + 0.5 ;
                bv = sin( i * M_PI / 180. ) / 2 + 0.5 ;
                
                CGContextSetRGBStrokeColor( myContext, rv, gv, bv, 1.0 ) ;
                
                px = (int)( cos( i * M_PI / 180. ) * (double)outerrad +
                                        cos( i * 30.0 * M_PI / 180. ) * (double)innerrad ) ;
                py = (int)( sin( i * M_PI / 180. ) * (double)outerrad +
                                        sin( i * 30.0 * M_PI / 180. ) * (double)innerrad ) ;
                
                if( i == 0.0 ) {
                        ox = px ;
                        oy = py ;
                } else {
                        CGContextMoveToPoint( myContext, ox, oy ) ;
                        CGContextAddLineToPoint( myContext, px, py ) ;
                        ox = px ;
                        oy = py ;
                }
                
                CGContextStrokePath( myContext ) ;
                
        }
        
CantGetGraphicsContext:
CantGetBoundingRectangle:
                
        return status ;
        
}
애플 제품 구매 애플 교육할인 구매
짧은 주소  http://j.mp/g9a8Zc  

댓글댓글 : 1   
악동시니
2005-12-21 00:41:28
잘되는데요




케이머그 이용 규정안내

신규사용자 이용안내

레벨제도 소개

응용문제 [지식 : 팁사용기] KMUG  
번호 제목 글쓴이 조회수 날짜
182
 데스크탑 화면 바꾸어 보기    베리 3264 2005/12/29
9:20 am
.
181
 환경설정-화면해상도 조절하기    베리 3014 2005/12/28
9:34 am
.
180
 환경설정에서 에너지절약 사용하기    베리 1981 2005/12/26
4:23 pm
.
179
 개인에 필요에 맞도록 시스템 환경설정하기    베리 2860 2005/12/24
8:54 pm
.
178
 dock에 자주 사용하는 프로그램 추가하기 덧글2    베리 2459 2005/12/24
8:53 pm
.
177
 dock 사용자 하기    베리 2235 2005/12/24
8:52 pm
..
176
 동영상 강좌 - 파인더 아이콘 바꾸어 보기    베리 2728 2005/12/22
1:47 pm
.
175
 동영상이 안보이시는 분...^^    베리 2513 2005/12/21
9:47 am
맥 사파리에서는 문제가 없는데요. 원도우 피씨에서 익스플로어에서 화면이 안보이네요. F5를 눌러서 새로고침을 여러번 하시기 바랍니다. 3-4번 하면 보여요... 원인은 분석중인데...꼭 찾아내겠습니다. ^^ 베리.
174
 동영상 강좌 - 파인더 원도우 사용자화 하기    베리 2634 2005/12/21
12:02 am
.
173
 동영상 강좌 - 휴지통 사용하기    베리 2490 2005/12/21
12:00 am
.
172
 동영상 강좌 - 빠른 파일 찾기    베리 2560 2005/12/20
11:59 pm
.
171
 동영상 강좌 - 홈폴더 사용하기    베리 2163 2005/12/20
11:57 pm
.
170
 동영상 강좌 - Mac os Dock 사용하기 덧글1    베리 3218 2005/12/20
11:55 pm
.
169
 동영상 강좌 - 파인더 사용하기 덧글2    베리 2358 2005/12/20
11:54 pm
.
168
 동영상 강좌 - 주소록 사용해보기    베리 2542 2005/12/20
11:03 am
.
   응용문제 덧글1 이미지    hongjuny 2023 2005/12/20
1:19 am
예전에 대입 학력고사에 본고사가 있던 시절, 서울대 본고사 문제에 나왔다는 전설의 그 문제! 사이클로이드라는 것이 있습니다. 이 예제는 사이클로이드와 똑같지는 않지만 대략 비슷한 원리입니다. 자전거 바퀴살에 불을 하나 달고 밤...
166
 Xcode 2.2 에서 카본 프로그램 만들자 (3) 덧글2 이미지    hongjuny 3179 2005/12/19
7:52 am
이번에는 본격적으로 Quartz 의 Core Graphics 를 이용해서 그림을 그려 보겠습니다. 참고 자료로는 애플 홈페이지에서 다운로드 받으실 수 있는 Quartz 2D Programming Guide 입니다. 프로그램의 기본 구조는 이...
165
 Xcode 2.2 에서 카본 프로그램 만들자 (2) 덧글9    hongjuny 1903 2005/12/17
11:35 am
윈도우 프로그래밍을 처음 공부한ㄴ 사람들이 한결같이 내놓는 불만은 "왜 이렇게 어렵냐?" 라는 것입니다. 막말로, C 에서는 printf("Hello Worldn") ; 요거 하나만 하면 글을 볼 수 있는데, 윈도우에서는 글...
164
 Xcode 2.2 에서 카본 프로그램 만들자 (1) 덧글13    hongjuny 2270 2005/12/16
12:32 pm
Xcode 새 버젼의 카본 어플리케이션 템플릿이 좀 더 친절해졌더군요. 한편, 지금까지 자기 고유의 이벤트 핸들러를 갖고 계시던 분들에게는 더 힘들어 졌더군요. ㅠㅠ 자 해 봅시다. 일단. Xcode 를 실행하고, File-&gt;N...
163
사용기  [Apple] Mac mini 리뷰 덧글9 이미지    김영권 11280 2005/12/15
11:25 am
2005년 1월 11일. 애플은 세계를 깜짝 놀라게 할 만한 새로운 매킨토시 시스템인 Mac mini를 발표하였다. Mac mini 가 발표된후 지금까지 경험할 수 없었던 슬림한 사이즈로인해 많은 화제를 불러일으켰다. 슬림한 사...



KMUG서비스안내    비욘드테크소개    광고/제휴    연락처/오시는길    공지사항    회원레벨가이드    사이트맵
Copyright ⓒ kmug.co.kr 2000~2019. All rights reserved 개인정보취급방침
지식 : 팁사용기