2011-12-25 52 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