import 'dart:html';
import 'dart:math';
void main() {
CanvasElement canvas = new Element.tag("canvas");
canvas.height = 700;
canvas.width = 700;
document.body.children.add(canvas);
var ctx = canvas.getContext("2d");
ctx.font ="30px 'MS ゴシック'";
ctx.fillText("猫", 50, 50);
ctx.beginPath();
ctx.moveTo(100, 100);
ctx.lineTo(100,600);
ctx.lineTo(600, 600);
ctx.stroke();
List<double>x=new List<double>(101);
List<double>y=new List<double>(101);
int s;
int m;
List<double> cx=new List<double>(1001);
List<double> lx=new List<double>(1001);
List<double> th=new List<double>(11);
List<double> k=new List<double>(101);
for (m=1;m<11;m++){
th[m]=0.95+0.01*m;
}
game sub=new game();
sub.th=th;
sub.makedata();
cx=sub.cx;
lx=sub.lx;
double maxc,minc;
maxc=0.0;
for(s=10;s<91;s++){
if(cx[s]>maxc)maxc=cx[s];
}
minc=5000.0;
for(s=10;s<91;s++){
if(cx[s]<minc)minc=cx[s];
}
for(s=10;s<91;s++){
x[s]=5*s+100.0;
y[s]=600-500*(cx[s]-minc)/(maxc-minc);
}
ctx.beginPath();
ctx.moveTo(x[10], y[10]);
for(s=11;s<90;s++){
ctx.lineTo(x[s],y[s]);
}
ctx.stroke();
}
class game{
List<double> cx=new List<double>(1001);
List<double> lx=new List<double>(1001);
List<double> cxs=new List<double>(1001);
List<double> lxs=new List<double>(1001);
List<double> th=new List<double>(11);
List<double> k=new List<double>(101);
int s,sx;
int m,n;
double a,beta;
double ls,ks;
double h;
double c1,l1,k1;
double n1;
int n2,n3;
void makedata(){
a=0.33;
beta=0.95;
ls=(1-a)/(2-a);
ks=ls*pow((1 / beta - 1) / a , 1 / (a - 1));
h=2*ks/100;
h=2*ks/100;
for (n=1;n<101;n++){
k[n]=n*h;
for (m=1;m<11;m++){
l1=ls;
setl(m,n,l1);
c1=th[m]*pow(k[n],a)*pow(l1,1-a);
setc(m,n,c1);
}
}
int t,mx;
double uc,w1,r1;
double ep;
t=0;
while(t<100){
for (m=1;m<11;m++){
for (n=10;n<91;n++){
c1=getc(m,n);
l1=getl(m,n);
k1=k[n]+th[m]*pow(k[n],a)*pow(l1,1-a)-c1;
n1=k1/h;
n2=n1.floor();
n3=n2+1;
uc=0.0;
for (mx=1;mx<11;mx++){
c1=getc(mx,n2)+(n1-n2)*(getc(mx,n3)-getc(mx,n2));
l1=getl(mx,n2)+(n1-n2)*(getl(mx,n3)-getl(mx,n2));
r1=th[mx]*a*pow(k1,a-1)*pow(l1,1-a);
uc=uc+(beta*(1+r1))/c1;
}
uc=0.1*uc;
setcs(m,n,1/uc);
w1=th[m]*(1-a)*pow(k[n],a)*pow(getl(m,n),-a);
setls(m,n,1-getc(m,n)/w1);
}
}
ep=0.0;
for (m=1;m<11;m++){
for (n=10;n<91;n++){
ep=ep+pow(getc(m,n)-getcs(m,n),2)+pow(getl(m,n)-getls(m,n),2);
}
}
for (m=1;m<11;m++){
for (n=10;n<91;n++){
setc(m,n,getcs(m,n));
setl(m,n,getls(m,n));
}
}
if (ep<0.0001)t=1000;
t=t+1;
}
}
double getcs(int s,int sx){
int n;
double c1;
n=number(s,sx);
c1=cxs[n];
return c1;
}
void setcs(int s,int sx,double c1){
int n;
n=number(s,sx);
cxs[n]=c1;
}
double getls(int s,int sx){
int n;
double c1;
n=number(s,sx);
c1=lxs[n];
return c1;
}
void setls(int s,int sx,double c1){
int n;
n=number(s,sx);
lxs[n]=c1;
}
double getc(int s,int sx){
int n;
double c1;
n=number(s,sx);
c1=cx[n];
return c1;
}
void setc(int s,int sx,double c1){
int n;
n=number(s,sx);
cx[n]=c1;
}
double getl(int s,int sx){
int n;
double c1;
n=number(s,sx);
c1=lx[n];
return c1;
}
void setl(int s,int sx,double c1){
int n;
n=number(s,sx);
lx[n]=c1;
}
int number(int s,int sx){
int n;
n=100*(s-1)+sx;
return n;
}
}
最終更新:2013年11月21日 05:16