Java 分治壳算法
您好,我今天的问题是分解并找出如何实际编码算法的下切线部分。我设法完成了步骤(1)和(2),但我现在仍停留在步骤(3)上 分治凸壳 船体: (1) 如果| S |首先 找到两个外壳的上切线是类似的。值得尝试并抽象切线检查,以便对所有检查(下/上、HA/HB)使用相同的函数。首先Java 分治壳算法,java,Java,您好,我今天的问题是分解并找出如何实际编码算法的下切线部分。我设法完成了步骤(1)和(2),但我现在仍停留在步骤(3)上 分治凸壳 船体: (1) 如果| S |首先 找到两个外壳的上切线是类似的。值得尝试并抽象切线检查,以便对所有检查(下/上、HA/HB)使用相同的函数。首先 //(2) Let b be the leftmost point of HB . for (int i=0; i<hullb.length; i++){ if (b < hullb[i][0]){
//(2) Let b be the leftmost point of HB .
for (int i=0; i<hullb.length; i++){
if (b < hullb[i][0]){
b = hullb[i][0];
}
}
for (int i=0; i<hullb.length; i++){
if (b > hullb[i][0]){
b = hullb[i][0];
}
}
找到两个外壳的上切线是类似的。值得尝试并抽象切线检查,以便对所有检查(下/上、HA/HB)使用相同的函数。这是一项需要有人阅读和理解的大量工作。你能不能把它配对一下,让它更容易提供帮助?对不起,我没有早点给你回复,我还不习惯这个系统。当然,我以后会更明确地设置问题的格式。=)这是很多人必须阅读和理解的工作。你能不能把它配对一下,让它更容易提供帮助?对不起,我没有早点给你回复,我还不习惯这个系统。当然,我以后会更明确地设置问题的格式。=)
public static boolean rightTurn(int [][] rt, int counter) //AxBxC = (Bx-Ax)(Cy-Ay)-(By-Ay)(Cx-Ax)
{
int ax = rt[counter-2][0];
int bx = rt[counter-1][0];
int cx = rt[counter][0];
int ay = rt[counter-2][1];
int by = rt[counter-1][1];
int cy = rt[counter-0][1];
int result =(bx-ax)*(cy-ay)-(by-ay)*(cx-ax);
if (result < 0){ // Result = VE+ (Right Turn), 0, VE- (Left Turn)
return true; //VE- = TRUE = Right Turn
}
else return false; //VE+ = FALSE = Left Turn
}
//(2) Let b be the leftmost point of HB .
for (int i=0; i<hullb.length; i++){
if (b < hullb[i][0]){
b = hullb[i][0];
}
}
for (int i=0; i<hullb.length; i++){
if (b > hullb[i][0]){
b = hullb[i][0];
}
}
aIndex = findRightmostA();
bIndex = findLeftmostB();
while(!(lowerTangentA (aIndex, bIndex) && lowerTangentB(aIndex, bIndex))){
aIndex = findLowerTangentA(aIndex, bIndex);
bIndex = findLowerTangentB(aIndex, bIndex);
}
lowerTangentA(aIndex, bIndex){
ux = hulla[aIndex+1][0];
uy = hulla[aIndex+1][1]; // array bounds!
ax = hulla[aIndex][0];
ay = hulla[aIndex][1];
wx = hulla[aIndex-1][0];
wy = hulla[aIndex-1][1];
bx = hullb[bIndex][0];
by = hullb[bIndex][1];
return !(leftTurn(bx,by,ax,ay,ux,uy) || leftTurn(bx,by,ax,ay,wx,wy));
}