Obj-C计算器 - 弧度到度

时间:2011-06-29 21:23:26

标签: objective-c ios sin cos

我一直在观看斯坦福CS193P讲座,我一直在研究作业计算器。我很轻松地完成了第一项任务,现在我正在努力为任务做额外的工作。然而,我陷入了一个额外的信用问题:

实现一个用户界面,用于选择sin()或cos()的操作数是否为 考虑弧度或度数。当您在C库中调用sin(x)时,假定为x 以弧度为单位(即0到2π绕圆圈一次),但用户可能想要 输入180并按下sin按钮得到0而不是-0.8012(这是正弦值) 180弧度)。您可以使用UIButton来切换titleLabel 每次按下UIButton时都会显示文本,但更好的方法是查看是否可以 通过阅读文档弄清楚如何使用UISwitch(如果你敢!)。

我实现了一个UISwitch并将其作为IBOutlet连接起来。当我执行'操作'时,我检查开关是打开还是关闭,并将其传递给我的模型以及要执行的操作。在我的罪恶和成本案例中,我做了以下事情:

else if ([operation isEqual:@"sin"])
{
    if (radians) {
        operand = sin(operand);
    }
    else {
        operand = sin(operand) * (180 / M_PI);
    }

}
// similar for cos

如果radians(这是BOOL:YES =弧度,没有=度),那么我通常执行操作;如果用户将开关置于'度',我想以度为单位返回值,因为赋值声明:用户可能想要输入180并按下sin按钮并获得0而不是-0.8012(这是正弦180弧度)。

但是,此代码并不完全有效。当我将切换到度数并执行sin 180时,它返回的值大于或等-45。那里出了点问题;而且我不确定是什么。我已经查找了如何进行转换,我认为我做得对,但显然没有。

我意识到这可能更适合math.stackexchange,但由于我想发布一些代码,我把它放在这里。有人可以就实施此方法的最佳方式提供一些建议吗?已经有一段时间了,因为我甚至使用过cos或sin,弧度和度数。

谢谢!

5 个答案:

答案 0 :(得分:8)

你的意思是operand = sin(operand * M_PI / 180);吗?

答案 1 :(得分:3)

试试这个 - 它对我有用:

    if ([operation isEqual:@"sin"])
    {
        operand = (operand * M_PI/180); // first convert the operand from radians to degrees then perform the operation
        operand = sin(operand);
    }

希望这有帮助

答案 2 :(得分:1)

你在哪里定义操作数?

你确定operand是CGFloat而不是内存地址吗?

您如何格式化输出?如果您使用%e,它将以科学记数法输出...尝试执行%f

答案 3 :(得分:1)

operand = sin(operand * (M_PI/180));

答案 4 :(得分:0)

你试过吗

sin( operand ) / 180.0 * M_PI