私はラインセグメントではなくラインについて話していると仮定しています。まず、あなたのラインセグメントからあなたのポイントの距離を見つける必要があります。this similar questionで提案されている方法のように、すべての入力に対して最小/最大距離を見つけることができます。
編集:this top coder articleからもあなたは、単に距離を見つけることができます。
//Compute the dot product AB ⋅ BC
int dot(int[] A, int[] B, int[] C){
AB = new int[2];
BC = new int[2];
AB[0] = B[0]-A[0];
AB[1] = B[1]-A[1];
BC[0] = C[0]-B[0];
BC[1] = C[1]-B[1];
int dot = AB[0] * BC[0] + AB[1] * BC[1];
return dot;
}
//Compute the cross product AB x AC
int cross(int[] A, int[] B, int[] C){
AB = new int[2];
AC = new int[2];
AB[0] = B[0]-A[0];
AB[1] = B[1]-A[1];
AC[0] = C[0]-A[0];
AC[1] = C[1]-A[1];
int cross = AB[0] * AC[1] - AB[1] * AC[0];
return cross;
}
//Compute the distance from A to B
double distance(int[] A, int[] B){
int d1 = A[0] - B[0];
int d2 = A[1] - B[1];
return sqrt(d1*d1+d2*d2);
}
//Compute the distance from AB to C
//if isSegment is true, AB is a segment, not a line.
double linePointDist(int[] A, int[] B, int[] C, boolean isSegment){
double dist = cross(A,B,C)/distance(A,B);
if(isSegment){
int dot1 = dot(A,B,C);
if(dot1 > 0)return distance(B,C);
int dot2 = dot(B,A,C);
if(dot2 > 0)return distance(A,C);
}
return abs(dist);
}
を使用すると、基本的な幾何学に精通している場合、私は、コードは自己説明を持っていると思いますが、あなたが慣れていない場合、あなたがする必要がありますあなたが問題を抱えている場合は、私たちがあなたを助けることができる記事を読んでください。あなたがcompute the areaこれらtrianles作成できる
[h
がab
からp
からの距離である] (ab) * h /2
、および:その領域で示されているアレイ内の各p
各3点[a,b,p]
はtrianleを形成
これは単純な形状ですが、何を試しましたか? – Andrew
ポイントからラインセグメントまでの距離をどのように定義しますか?これは凸包と何が関係していますか?なぜあなたはちょうどラインから各ポイントの距離を計算し、最大のものを取ることができないのですか? –
あなたが興味のある線分や無限に長い線であるかどうかを明確にすることもできます。 – DarthJDG