10 java algorithm math graphics graph
我正在用Java创建一个图形计算器作为我的编程类的项目.这个计算器有两个主要组成部分:绘制线条的图形本身和方程式评估器,它将方程式作为a String和......来评估它.
要创建该行,我创建一个Path2D.Double实例,并遍历该行上的点.为此,我计算了多个点,因为图形很宽(例如,如果图形本身是500px宽,我计算500个点),然后将其缩放到图形窗口.
现在,这适用于大多数线路.但是,在处理奇点时却没有.
如果在计算点时,图形遇到域错误(例如1/0),图形将关闭Path2D.Double实例中的形状并开始一条新线,以使该线在数学上看起来正确.例:
Good Asymptote http://content.imagesocket.com/images/good_line7cd.png
但是,由于它的缩放方式,有时它会被正确渲染,有时则不然.如果不是的话,实际的渐近线所示,因为那些500点之内,它跳过了x = 2.0方程中1 / (x-2),只有做到x = 1.98和x = 2.04,这是方程中完全有效的.例:
Bag Asymptote http://content.imagesocket.com/images/bad_linef6e.png
在那种情况下,我增加了左右两个窗口的窗口.
我的问题是:有没有办法使用这种缩放方法处理奇点,以便生成的线看起来在数学上是正确的?
我自己曾想过实现二进制搜索式方法,如果它发现它计算了一个点,然后下一个点离最后一个点很远,它会在这些点之间搜索域错误.但是,我无法弄清楚如何让它在实践中发挥作用.
感谢您提供的任何帮助!
小智 1
我终于找到了一种正确绘制奇点的方法。
本质上,我所做的是对于图表上的每个点,检查它是否位于可见的图形剪辑内。如果我击中图表上可见剪辑之外的点,我会绘制剪辑之外的第一个点,然后停止绘制此后的任何不可见点。
我不断计算点并检查它们是否位于可见剪辑内部,而不是绘制剪辑外部的点。一旦我再次点击剪辑内的点,我就会绘制该点之前的点的图表,然后绘制当前点的图表。
我一直这样做,直到绘制出整条线。这会产生一种错觉,即整条线都已开始绘制,而实际上只有可见部分。
如果窗口很大并且实际图形尺寸(以像素为单位)很小,这将不起作用,但它对我来说已经足够了。