やはり教科書は”ヒンギス本”です。17章P256のチャレンジ問題に挑戦しましょう。教科書通りにプログラムすると下の図のような結果が得られます。
教科書どおり |
チャレンジ問題では「この(ランダムな)直線を曲線に置き換えてください。」というものなので、こんなふうにしてみました。
曲線に換えてみた |
以下に.mファイルを示します。線を描く部分の抜粋です。
”//”でコメントアウトしてある部分は、教科書通りにランダムな直線を描くループになっていまして、その下のループの部分が曲線を描く様に変更(追加)したところです。
- (id)initWithFrame:(NSRect)rect {
if (![super initWithFrame:rect]) {
return nil;
}
srandom(time(NULL));
path = [[NSBezierPath alloc] init];
[path setLineWidth:3.0];
NSPoint p = [self randomPoint];
[path moveToPoint:p];
int i;
//for (i = 0 ; i <15 ; i++) { ・・・教科書どおりの直線を描くループ
//p =[self randomPoint];
//[path lineToPoint:p];
//} ・・・ループ終了
for (i = 0; i <15 ; i++) { ・・・チャレンジ問題の曲線を作るループ
NSPoint q = [self randomPoint];
NSPoint r = [self randomPoint];
NSPoint s = [self randomPoint];
[path curveToPoint:q controlPoint1:r controlPoint2:s]; ・・・曲線を書くメソッド
}
・・・ループ終了
[path closePath];
return self;
}
}
if (![super initWithFrame:rect]) {
return nil;
}
srandom(time(NULL));
path = [[NSBezierPath alloc] init];
[path setLineWidth:3.0];
NSPoint p = [self randomPoint];
[path moveToPoint:p];
int i;
//for (i = 0 ; i <15 ; i++) { ・・・教科書どおりの直線を描くループ
//p =[self randomPoint];
//[path lineToPoint:p];
//} ・・・ループ終了
for (i = 0; i <15 ; i++) { ・・・チャレンジ問題の曲線を作るループ
NSPoint q = [self randomPoint];
NSPoint r = [self randomPoint];
NSPoint s = [self randomPoint];
[path curveToPoint:q controlPoint1:r controlPoint2:s]; ・・・曲線を書くメソッド
}
・・・ループ終了
[path closePath];
return self;
}
}
ベジェ曲線を描く”curveToPoint: contorolPoint1: conrolPoint2:”というメソッドが見つかれば、後は試行錯誤でなんとかなりますので、そんなに難しくなかったですかね。
0 件のコメント:
コメントを投稿