重複の可能性:
iPhone のスムーズ スケッチ描画アルゴリズム
スケッチ描画をサポートする iPhone アプリを開発したいと考えています。
touchesMoved で次のようなコードを使用しました。
UIGraphicsBeginImageContext(self.view.frame.size);
[drawImage.image drawInRect:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)];
CGContextSetLineCap(UIGraphicsGetCurrentContext(), kCGLineCapRound);
CGContextSetLineWidth(UIGraphicsGetCurrentContext(), 5.0);
CGContextSetRGBStrokeColor(UIGraphicsGetCurrentContext(), 0.0, 0.0, 1.0, 1.0);
CGContextBeginPath(UIGraphicsGetCurrentContext());
CGContextMoveToPoint(UIGraphicsGetCurrentContext(), points.pointB.x, points.pointB.y);
CGContextAddLineToPoint(UIGraphicsGetCurrentContext(), points.pointA.x, points.pointA.y);
CGContextStrokePath(UIGraphicsGetCurrentContext());
drawImage.image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
見る:
曲線が十分に滑らかではありません。
sourceforge.net/projects/curve/files/ からいくつかのコードを使用して、Catmull-Rom スプライン法を試しました。
見る:
今回の曲線ははるかに滑らかですが、2 つの問題があります。
Catmull-Rom スプラインは、多くの 3 次ベジェ曲線セグメントと 2 次ベジェ曲線セグメントを使用して曲線を形成します。2 次ベジエ曲線セグメントは、タッチがいつ終了したかを判断できません。また、ユーザーが画面から指を離す前に二次セグメントをプロットすることはできません。ユーザーが描画しているときにのみ立方体セグメントをプロットできるため、ユーザーは遅延を感じるでしょう。指が速く動くと、曲線は指の後ろに遅れます。
アルゴリズムが角を修正しすぎるため、ユーザーは角のとがった星を描くことができません。
Autodesk の「Sketch Book」アプリのように、ユーザーにとって非常に優れた描画環境を提供したいと強く願っています。(下の画像を参照)
見る:
このアプリは滑らかな曲線を提供し、角が鋭い星を描くこともできます。
iPhoneでそれを行うにはどうすればよいですか?「スケッチブック」のような高品質を実現するには、どのアルゴリズムを使用できますか? 私の参照用のコードはありますか?
ありがとう!!