2009年2月11日水曜日

ハート。

追記(2009/2/12-1):結局,プロジェクトに付け足して公開しといた.
追記(2009/2/12):forループのstepを100ぐらいに荒くしても問題ないね…


動機:
Make:Japanの記事に影響されてやってみた.

参考:
ハート形曲線 (ありがとうございます.)

結果:


コード:
面倒なのでコードだけ.あまり考えていない.
- (NSBezierPath *)heartShapedBezierPath:(double)r
b:(double)b
{
double s= r / 3.0 * 2.0;
int i;
double x, y;
NSBezierPath *path= [NSBezierPath bezierPath];
for(i= 0;i<1000;i++) {
x= i/1000.0;
y= sqrt(1.0 -(x * x)) +b * sqrt(x);
NSPoint p= NSMakePoint(s*x, s*y);
if (i==0) {
[path moveToPoint:p];
}
else {
[path lineToPoint:p];
}
}
for(i= 1000;i>-1;i--) {
x= i/1000.0;
y= -sqrt(1.0 -(x * x)) +b * sqrt(x);
NSPoint p= NSMakePoint(s*x, s*y);
[path lineToPoint:p];
}
for(i= 0;i>-1000;i--) {
x= i/1000.0;
y= sqrt(1.0 -(x * x)) -b * sqrt(-x);
NSPoint p= NSMakePoint(s*x, s*-y);
[path lineToPoint:p];
}
for(i= -1000;i<0;i++) {
x= i/1000.0;
y= -sqrt(1.0 -(x * x)) -b * sqrt(-x);
NSPoint p= NSMakePoint(s*x, s*-y);
[path lineToPoint:p];
}
[path closePath];
return path;
}


補足:
Lensパッチのオリジナル記事はこちら

0 件のコメント: