0

2 つの線の交点に基づいて 2 つのダミー ポイントを生成したい。ラインがキャンバス領域を超えて交差しているため、計算できない場合。2 つのダミー ポイントは、y 位置が0 または max-Y にあり、各ラインと交差していると予測できます。


詳細 :

さて、私のプログラムに問題があります。1 つの点と 2 つの線のセットから正しい点を生成するために、私が持っている 2 つの線が互いに交差しているかどうかを見つけなければなりません。

Java.Line2D.intersectsLine() APIはこの条件を簡単に見つけることができますが、実際の問題は、線がキャンバスの境界を越えて交差することがあることです (x<0, y<0, x>maxX, y>maxY )。私が持っている線は無限と見なされますが、技術的な問題により、y=0 と y=maxY で線を引くことが制限されています。これを修正するために、両方のラインから 2 つのダミー ポイントを生成して、そのポイントの代わりにします。

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

ご覧のとおり、最初の画像では、タスクの答えとして F を簡単に取得できます。ただし、交点がキャンバス/パネルの境界を超えている場合は、代わりに 2 つのダミー ポイントを生成する必要があります。

私が得ることができるポイントの2つのセットがあります.B&EまたはC&Dです.正解はもちろんB&Eですが、これを解決するための正しいアルゴリズムを取得する方法がわかりません. 最初に、A から各行のそれぞれの点までの線を作成し、写真番号 2 でわかるように最大の 1 つの角度を答えとして取得しようとしています。これにより、正しい答えが最大の角度。しかし、考えられるすべてのランダムな条件では、2 本の線の位置を予測することはできず、どういうわけか私はこの条件でつまずきました。

新しい条件が現れました: http://i.stack.imgur.com/tGZy1.jpg

この状態では、2 つの最大の角度は B と D によって所有されているため、正しい点を取るための仮説が破棄されます。これを修正するために、私は現在、この問題についてブレインストーミングを行っています。しかし、そこにいるあなたの誰かが私にいくつかの啓発を与えることができれば、それは絶対に感謝されます. 数学の概念でさえ素晴らしいので、皆さんの中に何かアイデアがあるかもしれません?

ちなみに、ポイントは2本の線の中にあり、私のアルゴリズムでは線を1つずつチェックしています。

どんな助けでも大歓迎です。

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

1 に答える 1

0

今朝解いて、写真の詳細

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

画像でわかるように、各ポイントから領域を作成して置換ポイントを生成し、領域の内角を計算できます。正しい組み合わせにより、角度の合計が最大になります。また、領域内のすべての角度の合計は常に 360 度になるため、常に > 180 度になります。

于 2013-08-22T05:29:13.387 に答える