3

私より賢い人がこれを見てくれませんか。ここでObjective-cで見つけたベジェ曲線アルゴリズムを実装しようとしています。

出力はかなり間違っています。コードを正しく変換したので、元のコードが間違っているか、このように使用する必要がなかったと思います...組み込みNSBezierPathの曲線を使用すると見栄えがしますが、組み込みのを使用できませんNSBezierPath

NSBezierPathの例

NSBezierPath *bezierPath = [[NSBezierPath alloc] init];
[bezierPath setLineWidth:1.0f];
[bezierPath moveToPoint:NSMakePoint(x1, y1)];
[bezierPath curveToPoint:NSMakePoint(x4, y4) controlPoint1:NSMakePoint(x2, y2) controlPoint2:NSMakePoint(x3, y3)];

ベジェ曲線を描画しようとしている私のコード

- (void)drawBezierFrom:(NSPoint)from to:(NSPoint)to controlA:(NSPoint)a controlB:(NSPoint)b color:(NSUInteger)color
{
    float qx, qy;
    float q1, q2, q3, q4;
    int plotx, ploty;
    float t = 0.0;
    
    while (t <= 1)
    {
        q1 = t*t*t*-1 + t*t*3 + t*-3 + 1;
        q2 = t*t*t*3 + t*t*-6 + t*3;
        q3 = t*t*t*-3 + t*t*3;
        q4 = t*t*t;
    
        qx = q1*from.x + q2*to.x * q3*a.x + q4*b.x;
        qy = q1*from.y + q2*to.y * q3*a.y + q4*b.y;
    
        plotx = round(qx);
        ploty = round(qy);

        [self drawPixelColor:color atX:plotx y:ploty];
    
        t = t + 0.003;
    }
}

編集

Objective-cのベジェ曲線アルゴリズムを参照してください。完成した機能的なベジェ曲線メソッドには微調整が必​​要です。

4

2 に答える 2

4

このベジェ関数をxyプロッターで使用したところ、「to」に小さなエラーが見つかりました。to.x to.yとは、ペンがで開始および終了するb.x b.yように切り替える必要があります。fromto

qx = q1*from.x + q2*a.x + q3*b.x + q4*to.x;
qy = q1*from.y + q2*a.y + q3*b.y + q4*to.y;
于 2012-11-09T18:36:27.643 に答える
2

各ポイントの係数が間違っていて、加算の1つが乗算になったように見えます。私はあなたが欲しいものはこれだと思います:

    qx = q1*from.x + q2*a.x + q3*to.x + q4*b.x;
    qy = q1*from.y + q2*a.y + q3*to.y + q4*b.y;
于 2012-05-05T06:39:40.330 に答える