簡體   English   中英

根據超出畫布限制的兩條線的交點生成點

[英]Generate point based on intersection of two line beyond canvas limit

我想基於兩條線的交點生成兩個虛擬點。 如果線與畫布區域相交,則無法計算。 可以將兩個偽點預測為在0或max-Y處具有y位置, 並與每條線相交。


細節:

我的程序有問題。 為了從一組點和兩條線生成一個正確的點,我必須找出im具有的兩條線是否彼此相交。

Java.Line2D.intersectsLine()API可以簡單地找到此條件,但我的真正問題是,有時一條線將超出畫布邊界(x <0,y <0,x> maxX,y> maxY)相交。 我擁有的線被認為是無限的,但是技術問題限制了我在y = 0和y = maxY處畫線。 為了解決這個問題,我在兩條線上都生成了兩個虛擬點,以替代該點。

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

如您所見,在第一張圖片中,我可以輕松地獲得F作為任務的答案。 但是,當交點超出畫布/面板邊界時,我必須生成兩個虛擬點作為替換。

我可以得到兩點,即B&E或C&D,正確的答案當然是B&E,但我不知道如何獲得正確的算法來解決這一問題。 首先,我試圖創建一條從A到每條線中每個點的線,並獲得最大的一個角度(如您在圖片2中看到的那樣)作為答案,然后設法找到正確的答案是最大角度。 但是在每種可能的隨機情況下,都無法預測兩行的位置,因此我在這種情況下迷失了方向。

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

在這種情況下,B和D擁有兩個最大角度,因此破壞了取正確點的假設。 因此,為了糾正此問題,我目前正在就此問題進行集思廣益。 但是,如果有任何人可以給我一些啟示,那將是萬分感謝。 即使是數學概念也很棒,所以也許你們中的任何一個都有想法嗎?

順便說一下,在我的算法中,該點將位於兩行內,而Im將一一檢查。

任何幫助表示贊賞。

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]);
}
}
}
}

今天早上解決問題,圖片中的細節

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

從圖像中可以看到,可以通過從每個點創建一個區域來生成替換點,然后計算該區域的內角。 正確的組合將創建最大的角度總和。 由於該區域內所有角度的總和始終為360度,因此它將始終> 180度。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM