gpt4 book ai didi

iphone - 绘制不连续的数学表达式?

转载 作者:行者123 更新时间:2023-12-03 16:37:48 25 4
gpt4 key购买 nike

我正在尝试绘制数学函数并使用 CoreGraphics 框架。我通过手动计算用户定义的数学函数的 y 坐标来计算路径。

为了绘制函数,我包含了代码的简化版本:

CGContextBeginPath(context);
CGContextMoveToPoint(context, coordinateSystemOriginX, coordinateSystemOriginY);

//Add all points
CGContextAddLineToPoint(context, newPoint.x,newPoint.y);

CGContextSetLineWidth(context, 2);
CGContextSetStrokeColorWithColor(context, [[UIColor redColor] CGColor]);
CGContextStrokePath(context); //Connect them

这工作正常,但遗憾的是用户可能会输入一个不连续的函数,例如

 y = 10/x //undefined value for x=0

但是图形是在 x=0 处绘制的,并且点是相连的。看图:

enter image description here

如何评估未定义的点,以便能够正确绘制图形?我知道有一个解决方案,因为有许多绘图网站可以正确绘制图形。

小费或任何类型的帮助将不胜感激。您还可以随意添加一些神奇的代码;)谢谢!

 NSArray*undefinedPoints = [self someMagicFunction:(id)mathematicalExpression];
//returns 0 for mathematicalExpression = 10/x and 1 for 10/(x-1)

顺便说一句,我正在使用 ANExpressionParser 类来解析用户输入。 (http://mac.softpedia.com/progDownload/ANExpressionParser-Download-86833.html)

最佳答案

我假设您正在以固定增量提高您的 x 值,这可能取决于分辨率和缩放级别。

如果您足够幸运,实际上除以零,您将生成 +Inf-Inf 并且可以检查这一点,并在构建您的时跳过该值曲线(将曲线分成多个部分),这可以解决您在这种情况下的问题。

更一般且更常见的是,您实际上不会除以零,而是除以一个非常小的数字,产生一个非常大的数字的结果。您应该能够将该值与视口(viewport)的边界进行比较。如果该值超出视口(viewport)范围,您可以决定结束该曲线,一旦出现新值(对于新的 x 值),该值再次位于视口(viewport)内,您可以开始一条新曲线,从而解决您的问题在这种情况下也会出现问题。

如果您要提高每个像素的 x 值,那么上述应该是一个解决方案。

如果您比每个像素更粗略地提高 x 值,那么您还必须处理剪切线段的问题,并避免在检测不连续性方面出现误报。

<小时/>

还要检查您的特定库是否可以为您生成分析确定的不连续性列表。提前有了这样的列表,您可以将曲线分成由这些不连续点分隔的部分。

<小时/>

另请参阅Division by Zero in Computer Arithmetic , Asymptotes ,和Discontinuity .

关于iphone - 绘制不连续的数学表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14130743/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com