【问题标题】:Xcode Converting a string of equation to math equationXcode将一串方程转换为数学方程
【发布时间】:2012-03-21 00:22:49
【问题描述】:

我想问如何将用户插入的字符串转换为数学方程,以便 xCode 理解。

例如,如果用户在文本字段中输入此内容。 “2*sin(2*M_PI*t)”,其中等式中的“t”是代码中的一个变量,Xcode 可以理解这个等式

双重答案 = 2*sin(2*M_PI*t);

非常感谢 亲

【问题讨论】:

    标签: xcode string math type-conversion equation


    【解决方案1】:

    你可以只用标准的 cocoa 类来做,但是语法有点荒谬,而且设置的数量也是惊人的。

    @interface MyExprTest : NSObject
    -(void)run;
    @end
    
    @implementation MyExprTest
    
    -(void)run {
        NSExpression *e = [(NSComparisonPredicate *)[NSPredicate
            predicateWithFormat:@"2*FUNCTION(2*PI*$t,'sin')==0"]
            leftExpression];
        NSMutableDictionary *vars = [NSMutableDictionary
                                 dictionaryWithObjectsAndKeys:
                                 [NSNumber numberWithDouble:0.04], @"t",
                                 nil];
        NSLog(@"%@", [e expressionValueWithObject:self context:vars]);
    }
    
    -(double)PI {
        return M_PI;
    }
    
    @end
    
    @interface NSNumber (Trigonometry)
    - (NSNumber*)sin;
    @end
    
    @implementation NSNumber (Trigonometry)
    
    - (NSNumber*) sin {
        double result = sin([self doubleValue]);
        return [NSNumber numberWithDouble:result];
    }
    
    @end
    
    int main (int argc, const char * argv[]) {
        MyExprTest *t = [[MyExprTest alloc] init];
        [t run];
        return 0;
    }
    

    注意几点:

    • 表达式中的t 变为$t,以便您可以从vars 字典中引用它
    • M_PI 变成了简单的PI;注意添加的方法来支持它
    • 没有内置三角函数;看看FUNCTION 和一个类别是如何绕过它的。

    【讨论】:

    • 感谢您的回复。我正在为 iOS 执行此操作,因为 NSPredicate 中的字符串是 @"2*FUNCTION(2*PI*$t,'sin')==0" 这意味着当用户在文本字段中输入等式时必须遵循这个格式?抱歉,我是初学者,从不使用 NSExpression。
    • @Kin 这应该适用于 iOS。您需要更改用户输入的格式以匹配NSPredicate 的预期。请注意末尾的==0,它是针对缺乏公开可用的表达式解析 API 的解决方法。只有谓词解析器可用,因此您将表达式 2*sin(2*M_PI*t) 转换为谓词 2*sin(2*M_PI*t)==0,并使用 leftExpression 调用获取其左侧部分。
    【解决方案2】:

    最好的办法是使用像 DDMathParser 这样的数学解析器。

    它允许变量替换并具有内置常量。

    【讨论】:

    • 谢谢!这个数学解析器很有帮助!
    • DDMathParser 是否适用于 mac 和 ios 应用程序
    • @VigneshKumar 是的,iOS 4.0 或更高版本以及 OS X 10.6 或更高版本,根据他的 wiki 页面:github.com/davedelong/DDMathParser/wiki/…
    猜你喜欢
    • 2017-06-08
    • 1970-01-01
    • 2014-10-17
    • 1970-01-01
    • 2016-02-25
    • 2021-02-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多