2013-08-21 48 views
0

我想根據兩條線的交點生成兩個虛擬點。如果該線在畫布區域之外相交,則無法計算。這兩個虛擬點可以預測爲在y位置0或max-Y並與每條線相交。基於兩條線以上畫線的交點的生成點


細節:具有

以及即時通訊與我的程序有問題。爲了從一個點和兩個線的集合中產生一個正確的點,我必須找出我所擁有的兩條線是否相互交叉。

Java.Line2D.intersectsLine()API可以簡單地找到這個條件,但我真正的問題是,有時一條線相交畫布邊界之外(X < 0,Y < 0,X> maxX的,Y>美星)。線im已被認爲是無限的,然而技術問題限制我在y = 0和y = maxY處畫線。爲了解決這個問題,我在兩條線上生成了一個兩個虛擬點來代替這一點。

http://i.stack.imgur.com/23aSD.jpg

正如你所看到的,在第一幅圖像,我可以很容易地得到˚F作爲我的任務答案。但是當交點超出畫布/面板邊界時,我必須生成兩個虛擬點作爲替換。

有兩種設定點的,我可以得到的,這爲B &é或C & d,正確答案是B課程&電子商務,但我不知道如何得到正確的算法來解決這個問題。起初,我試圖創建一條線,從A到每一行中的每個點,並獲得最大的一個角度,你可以在圖片編號2中看到答案,我設法找到正確的答案是與最大的角度。但在每一種可能的隨機情況下,這兩種線路定位都無法預測,並且在某種程度上我偶然發現了這種情況。

新情況出現了:http://i.stack.imgur.com/tGZy1.jpg

在這種情況下最大的兩個角是由B和d擁有,所以它破壞的假設採取正確的點。所以爲了糾正這個問題,我目前正在爲這個問題集思廣益。但是,如果你們中有任何人可以給我一些啓發,這將是絕對讚賞。即使是一個數學概念也很棒,所以也許你們有什麼想法?

順便說一句,該點將在兩行內,並在我的算法中逐一檢查線。

任何幫助表示讚賞。

for (int i = 0;i<lineContainer.size()-1;i++){ 
for (int j = i+1;j<lineContainer.size();j++){ 

if lineContainer.get(i).intersectsLine(lineContainer.get(j)){ 
point = getIntersectionPoint(lineContainer.get(i), lineContainer.get(j)); 
answer.add(point); 
}else{ 
// Based on assumption that line that not paralel will somewhere intersects 
Point[] p = new Point[2]; 
p[0] = lineContainer.get(i).getP1(); 
p[1] = lineContainer.get(i).getP2(); 

Line l = new Line(queryPoint, p[0]); 
double[] d = new double[2]; 

d[0] = checkAngle(l, lineContainer.get(i)); 
l = new Line(queryPoint, p[1]); 

d[1] = checkAngle(l, lineContiner.get(i)); 
if(d[0]>d[1]){ 
answer.add(p[0]); 
}else{ 
answer.add(p[1]); 
} 
} 
} 
} 
+1

如果你可以編輯你的問題,包括更少的文本和包括_some_代碼展示你迄今爲止做了什麼,你需要什麼,你的問題將得到更多的意見,意見和答案 –

+0

你可以縮小以適應這一點?或者您可以剪切視圖的較小部分並顯示另一個顯示交叉點的預覽視圖 –

+0

什麼使得BE成爲正確的解決方案而不是CD? – Joni

回答

0

今天上午在圖片中解決這個問題,詳細

http://i.stack.imgur.com/zk8MQ.jpg

正如你可以在圖片中看到的,你可以通過創建從每個點的區域產生的更換點,並計算該區域的內部角度。正確的組合將創造最大的角度總和。而且它總是大於180度,因爲區域內所有角度的總和總是360度。