大家好!我是Java的新手。我希望你能帮助我解决这个问题,我认为这是一个愚蠢的问题,但我堆叠,不能想如何解决这个问题。
如果在void main中如何从循环中调用double d0?
public class Dist
{
public static void main(String[] args)
{
Point []pt=new Point [4];
for(int i = 0 ;i < pt.length ; i ++){
pt[i] = new Point();
}
pt[0].x=40; pt[0].y=40;
pt[1].x=40; pt[1].y=39;
pt[2].x=39; pt[2].y=40;
// pt[3].x=26; pt[3].y=36;
int N=4;
for (int n=0;n<N-2;n++){
int ux=pt[n].x-pt[n+1].x;
int uy=pt[n].y-pt[n+1].y;
int vx=pt[n+1].x-pt[n+2].x;
int vy=pt[n+1].y-pt[n+2].y;
int wx=pt[n].x-pt[n+2].x;
int wy=pt[n].y-pt[n+2].y;
int zx=ux-vx;
int zy=uy-vy;
int a=(ux*ux)+(uy*uy);
int b=(ux*vx)+(uy*vy);
int c=(vx*vx)+(vy*vy);
int d=(ux*wx)+(uy*wy);
int e=(vx*wx)+(vy*wy);
double dmin;
if(a==0||c==0||e==0) {
System.out.println("a"+a);
break;
}
int f = (a * c) - (b * b);
if(f <= 0){
int tc = d / b;
int d0x=wx+(tc*vx);
int d0y=wy+(tc*vy);
double d0=Math.sqrt((d0x*d0x)+(d0y*d0y));
System.out.println("dmin1:"+d0);
}
int s=(b*e)-(c*d);
int t=(a*e)-(b*d);
int d1x=wx+(s*ux)-(t*vx);
int d1y=wy+(s*uy)-(t*vy);
double d1=Math.sqrt((d1x*d1x)+(d1y*d1y));
System.out.println("d1:"+d1);
double h=Math.pow((ux-vx),2);
double j=Math.pow((uy-vy),2);
double k=h+j;
int tx=-wx*(ux-vx);
int ty=-wy*(uy-vy);
double ts=(tx+ty)/k;
double d2x=wx+(ts*(ux-vx));
double d2y=wy+(ts*(uy-vy));
double d2=Math.sqrt((d2x*d2x)+(d2y*d2y));
System.out.println("d2:"+d2);
if(d1<d2)
dmin=d1;
else
dmin=d2;
System.out.println("dmin:"+dmin);
}
}
}
答案 0 :(得分:0)
您的问题有点不清楚,但问题可能是您在d0
块内声明if
。它不会在该块之外可见。尝试在其他地方宣布它。