class pro{
double[][] x=new double[3][3];
double[] y=new double[3];
double[] a=new double[3];
double[] v=new double[3];
double[] vec=new double[3];
double b,delta;
double g1,q,e;
int m,n,h,point,tr;
public static void main(String args[]){
pro test=new pro();
}
pro(){
x[1][1]=2;
x[1][2]=1;
x[2][1]=1;
x[2][2]=2;
y[1]=1;
y[2]=-1;
a[1]=3;
a[2]=-2;
b=5;
for(tr=1;tr<1000;tr++){
point=makepoint();
System.out.println(point);
q=-0.05;
for(n=1;n<3;n++){
v[n]=df(point,n)+q*dp(n);
}
e=0;
for(n=1;n<3;n++){
e=e+v[n]*v[n];
}
e=Math.pow(e,0.5);
for(n=1;n<3;n++){
vec[n]=v[n]/e;
}
delta=0.01;
for(n=1;n<3;n++){
a[n]=a[n]+vec[n]*delta;
System.out.println(a[n]);
}
}
}
double df(int m,int n){
double delta,m1,m2;
double[] alpha=new double[3];
delta=0.01;
alpha[1]=a[1];
alpha[2]=a[2];
alpha[n]=alpha[n]+delta;
m1=met(a,b,m,x);
m2=met(alpha,b,m,x);
return (m2-m1)/delta;
}
int makepoint(){
double f1,minf;
int m,h,mx;
minf=999;
mx=0;
for(m=1;m<3;m++){
f1=9999;
h=0;
if(g(a,b,m,x)>0)h=h+1;
if(y[m]<0)h=h+1;
if(h==2)f1=met(a,b,m,x);
h=0;
if(g(a,b,m,x)<0)h=h+1;
if(y[m]<0)h=h+1;
if(h==2)f1=met(a,b,m,x);
if(f1<minf)mx=m;
if(f1<minf)minf=f1;
}
return mx;
}
double met(double[] a,double b,int m,double[][] x){
double m1,m2,t,mt;
m1=a[1]*a[1]+a[2]*a[2];
m2=-b-a[1]*x[m][1]-a[2]*x[m][2];
t=m2/m1;
mt=t*t*m1;
mt=Math.pow(mt,0.5);
return mt;
}
double dp(int n){
int m,h;
double d1;
d1=0;
for(m=1;m<3;m++){
h=0;
if(g(a,b,m,x)>0)h=h+1;
if(y[m]<0)h=h+1;
if(h==2)d1=d1+a[n];
h=0;
if(g(a,b,m,x)<0)h=h+1;
if(y[m]>0)h=h+1;
if(h==2)d1=d1-a[n];
}
return d1;
}
double pen(){
int m,h;
double q1;
q1=0;
for(m=1;m<3;m++){
h=0;
if(g(a,b,m,x)>0)h=h+1;
if(y[m]<0)h=h+1;
if(h==2)q1=q1+g(a,b,m,x);
h=0;
if(g(a,b,m,x)<0)h=h+1;
if(y[m]>0)h=h+1;
if(h==2)q1=q1-g(a,b,m,x);
}
return q1;
}
double g(double[] a,double b,int m,double[][] x){
double g1;
g1=a[1]*x[m][1]+a[2]*x[m][2]+b;
return g1;
}
}
最終更新:2011年06月03日 09:34