6

CoreGraphics で弧を描く方法を理解しようとしています。次のシナリオでどのメソッド呼び出しを行うか、および角度を計算する方法を理解しています。

----------
|        |
*--------*

ポイントが両方とも長方形の下部にある場合。しかし、2 つの点が別の場所にある場合、正しい角度を計算する方法がわかりません。

---------*
|        |
*---------

私の画像の下部を参照してください。

ここに画像の説明を入力

Ray Wenderlich は、最初に述べたポイント位置のみの円弧の作成に関する優れたチュートリアルを提供しています。

// sample code for creating arc for path from bottom of rect
CGMutablePathRef createArcPathFromBottomOfRect(CGRect rect, CGFloat arcHeight) {
  CGRect arcRect = CGRectMake(rect.origin.x, rect.origin.y + rect.size.height
    - arcHeight, rect.size.width, arcHeight);
  CGFloat arcRadius = (arcRect.size.height/2) + (pow(arcRect.size.width, 2) /
    (8 * arcRect.size.height));
  CGPoint arcCenter = CGPointMake(arcRect.origin.x + arc.size.width/2,
    arcRect.origin.y + arcRadius);
  CGFloat angle = acos(arcRect.size.width/ (2*arcRadius));
  CGFloat startAngle = radians(180) + angle;
  CGFloat endAngle = radians(360) - angle;
  CGMutablePathRef path = CGPathCreateMutable();
  CGPathAddArc(path, NULL, arcCenter.x, arcCenter.y, arcRadius, startAngle,
    endAngle, 0);
  return path;
}

画像の下部に示されているように、他の状況で角度を計算するにはどうすればよいですか?

4

2 に答える 2

8

アークを作成する簡単な方法は、次を使用することです。

void CGContextAddArcToPoint (
   CGContextRef c,
   CGFloat x1,
   CGFloat y1,
   CGFloat x2,
   CGFloat y2,
   CGFloat radius
);

Ray Wenderlichのサイト( https://www.raywenderlich.com/33330/core-graphics-tutorial-glossy-buttons )からこの画像を見ると、点(x1、y1)が曲線と点( x2、y2)がエンドポイントです。次に、コーナーの半径と出来上がりを指定するだけです。これは、あなたが探していることのために使用するのがより簡単なAPIかもしれないようです。

于 2012-07-07T23:29:27.757 に答える
0

円を決定するには、少なくとも 3 点が必要です。

2 つの点が四角形の下部にある最初のシナリオでは、arcHeight がわかっている場合、上部の中間点は暗黙的に 3 番目の点になります。したがって、3 つの点が円、つまり円弧を決定します。したがって、すべての角度などを計算できます。

ただし、2 番目のシナリオでは、3 番目の点は定義されていません。したがって、曲率の異なる 2 点を通る無限の数の円弧を描くことができます。円弧を修正するには、追加の要件が必要になります。たとえば、円弧の 1 つである半径または 3 番目の点です。

于 2012-07-09T08:47:46.027 に答える