2011-12-25 35 views
0

我刚刚尝试编写“行”代码以形象化一个简单的数学运算; 这是Graphics2D - 数学绘图 - Ploygon - 如何获取所有绘图点

Ploygon polygon=new Ploygon(); 
int x,y; 


ploygon.addPoint(0,0); 
polygon.addPoint(width,height); 

g.drawPolygon(polygon); 

该代码给出y = x效果;

行...这是相当简单的代码;但我有兴趣得到的东西是在语句周期中将每个N像素分为{x0,y0} {0,0}和{x1,y1} {width,height},这就是问题:(

多边形xpoints数组并不方便,因为它可能只包含调用addPoint(x,y)方法时添加的相同点;所以在我的情况下,只有两个由Polygon连接的添加点,但所有其余点这些点位于{x0,y0} {0,0}和{x1,y1} {宽度,高度}之间{012}如何得到它们?

例如:回到前面的代码片段,点x,y值为(高度%N)= 0等?

有没有最优化的方法?

感谢

+0

另请参见[将点添加到'Polygon'](http://stackoverflow.com/a/5878090/230513)。 – trashgod 2011-12-25 02:27:11

回答

0

你要在这里体会到什么是你不再与像素/坐标本身的工作,但你与向量工作。您将从包含坐标(-500,-500)(500,500)的多边形获得相同的图像,该坐标被绘制到Graphics对象上,该对象表示从左下角的(0,0)到(右侧)的(100,100)(剪切)区域。 (现在忽略Graphics的实际坐标系具有反转的y轴)。

因此,你必须用更回归基础的数学方法解决这个问题,而不是“读像素”的方式。除非你只是想确定一个给定的点是否为这个形状(其中Shape接口提供了一个内置的方法),你可能会考虑计算一条线的斜率并确定代表线的函数。例如,从示例开始,您有两个点(-500,-500)和(500,500),斜率为1000/1000 = 1。因此,您可以使用您的x坐标将该函数重写为f(x) = -500 + (x + 500)。那么如果你想知道点(100,200)是否在该线上,那么你需要做的就是计算f(100)并且看到它不是。

回到您的示例中,找到与谓词相匹配的点(高度%N = 0),我们将寻找f(x) == 0 mod N,因此您需要做的所有'全部'都是求解x的等式。

+0

“回到你的例子,找到与谓词(高度%N = 0)匹配的点,我们将寻找f(x)== 0 mod N,因此你需要做的'all'就是求解x的方程式“。 这一切都很好,但如果f(x)!= N?我的意思是它不是整数,所以没有办法得到正确的x,y坐标?例如,如果情节陈述类似于“y = x * tan(a/b)+ coeff”会怎样?有没有办法来检测这种功能点,让他们让我们说一个数组? – user592704 2011-12-25 03:42:28

+0

如果我理解正确,那么可以通过将您的答案舍入为最接近的整数来解决? – user268396 2011-12-25 12:05:51

+0

Emm ... Math.round()你的意思是?好吧,我会尝试并报告我的结果 – user592704 2011-12-26 19:31:46