Created
April 22, 2014 14:05
-
-
Save castaneai/11180528 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include<stdio.h> | |
#include<math.h> | |
double qc(double a,double b,double c)/*qc means quadratic formula*/{ | |
double result; | |
result=(-b+sqrt(pow(b,2)-4*a*c))/(2*a); | |
return result; | |
} | |
void main(){ | |
const double SDA=70,SDB=30; | |
/*Sd=Shortest Distance 最短距離 つまり川からAおよびBへの最短距離*/ | |
int a,b; | |
/*AおよびBの川への最短距離から実際に渡る地点までの距離をa,bとおいた*/ | |
const double WIDTH=140,LENGTH=210; | |
/*川の幅をWIDTH 川の長さをLENGTHとした*/ | |
const double FLOW=0.9; | |
/*川の流れの速さをFLOWとした*/ | |
const double MSOF=1,MSOR=6; | |
/*Movement speed on Field(River) */ | |
double i,j,k,t; | |
/*i,j,kはqc関数をつかうためのix^2+jx+kとするためのもの*/ | |
/*tは総所要時間*/ | |
double tempT=1000,tempA=0,tempB=0; | |
/*temp~という変数は一時的に最小値を格納し保存するために用いるもの*/ | |
for(a=0;a<210;a++){ | |
/*aを1mごとに210mまでずらしていった | |
a++の部分をa=a+0.1等に変えることでより精度は高めることが出来る*/ | |
for(b=0;b<210;b++){ | |
/*bをaと同様に1mごとに210mまでずらしていった | |
aと同様にb++の部分をb=b+0.1等に変えることでより精度は高めることが出来る*/ | |
i=pow(LENGTH-a-b,2)+pow(WIDTH,2); | |
j=-2*(LENGTH-a-b)*WIDTH*FLOW; | |
k=pow(WIDTH,2)*(pow(FLOW,2)-pow(MSOR,2)); | |
/*(root(MSOR^2-x^2)+FLOW)/x=(LENGTH-a-b)/WIDTH | |
という川を渡る際のx座標に関する式をxについて解くと | |
(pow(LENGTH-a-b,2)+(pow(WIDTH,2))*x^2+-2*(LENGTH-a-b)*WIDTH*FLOW)*x+(pow(WIDTH,2)*(pow(FLOW,2)-pow(MSOR,2)))となった*/ | |
t=WIDTH/qc(i,j,k)+(sqrt(a*a+SDA*SDA)+sqrt(b*b+SDB*SDB))/MSOF; | |
/*上記のi,j,kを用いて水上での時間及び陸上での時間を総計した結果をtに入れた*/ | |
if(tempT>t){ | |
tempT=t; | |
tempA=a; | |
tempB=b; | |
} | |
/*もし求めたtが今までのもののなかで最小だった場合tempTに代入 | |
同時にその時のaとbの値を保存した*/ | |
} | |
} | |
printf("%f %f %f\n",tempT,tempA,tempB); | |
/*最短時間とその時のa,bを出力する*/ | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment