2

私はそれらを頻繁に使用しているのを見て、良い三角形のクラスを構築しようとしています。boolユーザーがラジアンではなく度を使用するようにを設定できるように、クラスを変更することにしました。興味深いことに、説明を除いて、すべてが正常に機能しているようです。

    IMTriangle *tri = [[IMTriangle alloc]init];
    tri.shouldUseDegrees = YES;
    tri.SideA = 3;
    tri.SideB = 4;
    tri.SideC = 5;

    [tri solve];
    NSLog(@"tri %@", tri);
    double A = tri.angleA;
    double B = tri.angleB;
    double C = tri.angleC;
    NSLog(@"A = %f  B = %f  C = %f",A,B,C);
    NSLog(@"tri  %@",tri);

これをくれ

tri a=3.0000 b=4.0000 c=5.0000 A=0.6435 B=0.9273 C=1.5708 perimeter=6.0000 area=12.0000 height=4.0000 shouldUseDegrees 1
A = 36.869897  B = 53.130098  C = 90.000004
tri  a=3.0000 b=4.0000 c=5.0000 A=36.8699 B=53.1301 C=90.0000 perimeter=6.0000 area=12.0000 height=4.0000 shouldUseDegrees 1

三角形のオブジェクトから角度を取得して使用した後、その説明は突然予想どおりになりました。私が使用しているカスタムセッターとゲッターと関係があるかどうかはわかりません。

-(void) setAngleA:(double)angleA
{
    if (!_shouldUseDegrees){
        _angleA = angleA;
    }
    else _angleA = angleA * M_PI/180;
}
-(double) angleA
{
    if (!_shouldUseDegrees) {
        return _angleA;
    }
    return  _angleA *= 180/M_PI;
}

または私の説明方法

-(NSString *) description;
{

    return [NSString stringWithFormat:@"a=%.4f b=%.4f c=%.4f A=%.4f B=%.4f C=%.4f perimeter=%.4f area=%.4f height=%.4f shouldUseDegrees %i", _sideA , _sideB , _sideC , _angleA , _angleB , _angleC , self.area , self.perimeter , self.height ,_shouldUseDegrees];

}
4

1 に答える 1

2

2つの問題があります。

_angleAまず、アクセサでの再割り当てを停止する必要があります。

return  _angleA *= 180/M_PI;

それは次のようになります。

return  _angleA * 180/M_PI;

もう1つは、印刷出力を度単位で表示することです。インスタンス変数は常にラジアンを保持しているため、インスタンス変数の値を出力する代わりに、に変更_angleA, _angleB, _angleCself.angleA, self.angleB, self.angleCてカスタムアクセサーを呼び出します。

于 2012-12-15T21:55:02.280 に答える