0

我想自己创建一个动态图。但我最大的问题是我怎样才能得到一条线和我的图形相交的坐标(假设只是一条线)?

类似于 iPhone 中的 Stock App,在这个应用程序中,如果您查看图表,当您在屏幕上移动手指时,您会看到线和图表相交的坐标。

感谢您的帮助,对不起我的英语:)

4

3 回答 3

0

猜猜你可以使用线性代数技能获得线到线的交点坐标,例如维基百科对此的了解:http ://en.wikipedia.org/wiki/Line-line_intersection

于 2012-10-15T16:24:04.637 回答
0

要使用与您的问题相同的示例,在此问题上执行类似于 iPhone 上的 Stocks App 的操作,这很容易:

  • 当用户触摸视图时,您将获得视图上触摸的坐标 ( CGPoint pt = [[touches anyObject] locationInView:yourView])
  • 然后将这个点在视图坐标中转换为图形上的一个点:您可能知道代表图形的横坐标 X=0 的点的绘制位置,以及代表横坐标 X=XMax 的点的绘制位置,所以通过简单的数学运算,您可以确定您触摸的 X 位置对应于哪个横坐标
  • 然后,如果您有与触摸点相对应的横坐标 X,那么您就拥有了一切(曲线上与此 X 相对应的 Y 由图表的数据源给出)

所以想象你y=sin(x)在你的图表上绘制了一些函数,并且因为你的 Y 轴是 20 点宽以便你绘制 Y 轴标签,所以表示 X=0 的点被绘制在x=20pt你的 UIView 上。并想象您的 X 轴从 0 变为 10,并且您表示 X=10 的点被绘制在x=300pt您的视图上。

然后,当用户点击视图上 x 坐标为 的点时x=140pt,很容易计算出它对应于图形上的坐标 X=5((x-20)/(300-20)*Xmax = 120/240*10 = 5,简单的三规则)。因此,用户点击了对应于 X=5 的点,并且在曲线上,该点为 ,X=5因为Y=sin(5)您的曲线为y=sin(x)

于 2012-10-15T15:52:20.113 回答
0

就在我的脑海中,天真地无知图形显示程序通常如何做到这一点(即某种图形“最佳实践”):

假设您的图表由许多(线性)线组成,由法线方程 y = kx+m 描述,我想您必须求解当您的参考线(我们称之为 refline)具有相同时的方程x 和 y 坐标作为组成图形的线。

即,如果您的图表是一条线,由 y = 2*x+100 描述(这是 1999 年的超级 IT 股票!),并且您的参考线目前在 y = 120,我想您将不得不求解方程系统120 = 2*x + 100 以获得 refline 和图形相交处的 x。

于 2012-10-15T15:52:32.150 回答