Xcode将一串方程转换为数学方程

时间:2012-03-21 00:22:49

标签: xcode string math type-conversion equation

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

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

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

非常感谢 健

2 个答案:

答案 0 :(得分:5)

你可以只使用标准的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和一个类别来解决它。

答案 1 :(得分:3)

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

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