看板 C_Sharp 關於我們 聯絡資訊
各位高手們 可以幫我看看我的程式出了什麼問題嗎 我寫了一個自動倒車入庫的程式 我用了遞迴 在主程式中呼叫EXE副程式 然後在EXE的最後呼叫自己 但是程式中的e跟y可以順利 傳回自己重複運算 但是phi卻不行>"< (隨著呼叫次數改變 e y 會一直變 但是phi 跟theta卻始終維持不變..) 我明明都用一樣的方法寫阿.. 請各位幫我解答吧! 感謝感謝!!!<(_ _)> using System; using System.Collections.Generic; using System.Text; namespace ConsoleApplication1 { class Program { //================================================= static public double LE(double x) //LE(x) { if (x<10) return 1; else if (x >= 10 && x<35) return (35-x) / 25; else return 0; } //================================================== static public double LC(double x) //LC(x) { if (x>=30 && x<40) return 1-((40-x)/10); else if (x>=40 && x<50) return (50-x)/10; else return 0; } //=================================================== static public double CE(double x) //CE(x) { if (x >= 45 && x < 50) return 1-((50-x) / 5); else if (x >= 50 && x < 55) return (55-x) / 5; else return 0; } //================================================= static public double RC(double x) //RC(x) { if (x >= 50 && x < 60) return 1-((60-x) / 10); else if (x >= 60 && x < 70) return (70-x) / 10; else return 0; } //================================================== static public double RJ(double x) //RJ(x) { if (x >= 65 && x < 90) return 1-((90 - x) / 25); else if (x >= 90) return 1; else return 0; } //================================================== static public double RB(double x) //RB(x) { if (x >= -100 && x < -45) return 1-((-45 - x) / 55); else if (x >= -45 && x < 10) return (10 - x) / 55; else return 0; } //================================================== static public double RU(double x) //RU(x) { if (x >= -10 && x < 25) return 1-((25 - x) / 35); else if (x >= 25 && x < 60) return (60 - x) / 35; else return 0; } //=================================================== static public double RV(double x) //RV(x) { if (x >= 40 && x < 65) return 1-((65 - x) / 25); else if (x >= 65 && x < 90) return (90 - x) / 25; else return 0; } //=================================================== static public double VE(double x) //VE(x) { if (x >= 80 && x < 90) return 1-((90 - x) / 10); else if (x >= 90 && x < 100) return (100 - x) / 10; else return 0; } //=================================================== static public double LV(double x) //LV(x) { if (x >= 90 && x < 115) return 1-((115 - x) / 25); else if (x >= 115 && x < 140) return (140 - x) / 25; else return 0; } //=================================================== static public double LU(double x) //LU(x) { if (x >= 120 && x < 155) return 1-((155 - x) / 35); else if (x >= 155 && x < 190) return (190 - x) / 35; else return 0; } //=================================================== static public double LB(double x) //LB(x) { if (x >= 170 && x < 225) return 1-((225 - x) / 55); else if (x >= 225 && x < 280) return (280 - x) / 55; else return 0; } //==================================================== static public double MIN(double m, double n) //Find the minimum of two numbers { if (m >= n) return n; else return m; } //==================================================== static public void EXE( double e, double y, double phi) { int NB = -30, NM = -15, NS = -6, ZE = 0, PS = 7, PM = 15, PB = 30; double[] MOTHER = new double[35]; double[] CHILD = new double[35]; double Add_Childs = 0, Add_Mothers = 0, theta; int counter; CHILD[0] = MIN(RB(phi), LE(e)) * PS; CHILD[1] = MIN(RB(phi), LC(e)) * PM; CHILD[2] = MIN(RB(phi), CE(e)) * PM; CHILD[3] = MIN(RB(phi), RC(e)) * PB; CHILD[4] = MIN(RB(phi), RJ(e)) * PB; CHILD[5] = MIN(RU(phi), LE(e)) * NS; CHILD[6] = MIN(RU(phi), LC(e)) * PS; CHILD[7] = MIN(RU(phi), CE(e)) * PM; CHILD[8] = MIN(RU(phi), RC(e)) * PB; CHILD[9] = MIN(RU(phi), RJ(e)) * PB; CHILD[10] = MIN(RV(phi), LE(e)) * NM; CHILD[11] = MIN(RV(phi), LC(e)) * NS; CHILD[12] = MIN(RV(phi), CE(e)) * PS; CHILD[13] = MIN(RV(phi), RC(e)) * PM; CHILD[14] = MIN(RV(phi), RJ(e)) * PB; CHILD[15] = MIN(VE(phi), LE(e)) * NM; CHILD[16] = MIN(VE(phi), LC(e)) * NM; CHILD[17] = MIN(VE(phi), CE(e)) * ZE; CHILD[18] = MIN(VE(phi), RC(e)) * PM; CHILD[19] = MIN(VE(phi), RJ(e)) * PM; CHILD[20] = MIN(LV(phi), LE(e)) * NB; CHILD[21] = MIN(LV(phi), LC(e)) * NM; CHILD[22] = MIN(LV(phi), CE(e)) * NS; CHILD[23] = MIN(LV(phi), RC(e)) * PS; CHILD[24] = MIN(LV(phi), RJ(e)) * PM; CHILD[25] = MIN(LU(phi), LE(e)) * NB; CHILD[26] = MIN(LU(phi), LC(e)) * NB; CHILD[27] = MIN(LU(phi), CE(e)) * NM; CHILD[28] = MIN(LU(phi), RC(e)) * NS; CHILD[29] = MIN(LU(phi), RJ(e)) * PS; CHILD[30] = MIN(LB(phi), LE(e)) * NB; CHILD[31] = MIN(LB(phi), LC(e)) * NB; CHILD[32] = MIN(LB(phi), CE(e)) * NM; CHILD[33] = MIN(LB(phi), RC(e)) * NM; CHILD[34] = MIN(LB(phi), RJ(e)) * NS; MOTHER[0] = MIN(RB(phi), LE(e)); MOTHER[1] = MIN(RB(phi), LC(e)); MOTHER[2] = MIN(RB(phi), CE(e)); MOTHER[3] = MIN(RB(phi), RC(e)); MOTHER[4] = MIN(RB(phi), RJ(e)); MOTHER[5] = MIN(RU(phi), LE(e)); MOTHER[6] = MIN(RU(phi), LC(e)); MOTHER[7] = MIN(RU(phi), CE(e)); MOTHER[8] = MIN(RU(phi), RC(e)); MOTHER[9] = MIN(RU(phi), RJ(e)); MOTHER[10] = MIN(RV(phi), LE(e)); MOTHER[11] = MIN(RV(phi), LC(e)); MOTHER[12] = MIN(RV(phi), CE(e)); MOTHER[13] = MIN(RV(phi), RC(e)); MOTHER[14] = MIN(RV(phi), RJ(e)); MOTHER[15] = MIN(VE(phi), LE(e)); MOTHER[16] = MIN(VE(phi), LC(e)); MOTHER[17] = MIN(VE(phi), CE(e)); MOTHER[18] = MIN(VE(phi), RC(e)); MOTHER[19] = MIN(VE(phi), RJ(e)); MOTHER[20] = MIN(LV(phi), LE(e)); MOTHER[21] = MIN(LV(phi), LC(e)); MOTHER[22] = MIN(LV(phi), CE(e)); MOTHER[23] = MIN(LV(phi), RC(e)); MOTHER[24] = MIN(LV(phi), RJ(e)); MOTHER[25] = MIN(LU(phi), LE(e)); MOTHER[26] = MIN(LU(phi), LC(e)); MOTHER[27] = MIN(LU(phi), CE(e)); MOTHER[28] = MIN(LU(phi), RC(e)); MOTHER[29] = MIN(LU(phi), RJ(e)); MOTHER[30] = MIN(LB(phi), LE(e)); MOTHER[31] = MIN(LB(phi), LC(e)); MOTHER[32] = MIN(LB(phi), CE(e)); MOTHER[33] = MIN(LB(phi), RC(e)); MOTHER[34] = MIN(LB(phi), RJ(e)); for (counter = 0; counter <= 34; counter++) { Add_Childs = Add_Childs + CHILD[counter]; Add_Mothers = Add_Mothers + MOTHER[counter]; } theta = Add_Childs / Add_Mothers; Console.WriteLine("\n\ntheta: {0}", theta); e = e + 1.6 * Math.Sin((Math.PI / 180) * theta) * Math.Cos((Math.PI / 180) * phi); y = y + 1.6 * Math.Sin((Math.PI / 180) * theta) * Math.Cos((Math.PI / 180) * phi); phi =(180/Math.PI)* Math.Atan((Math.Sin((Math.PI / 180) * phi) + 1.6 * Math.Cos(Math.PI / 180 * phi) * Math.Sin(Math.PI / 180 * theta)) / (Math.Cos((Math.PI / 180) * phi) - 1.6 * Math.Sin(Math.PI / 180 * phi) * Math.Sin(Math.PI / 180 * theta))); Console.WriteLine("\n\nNew_x: {0}", e); Console.WriteLine("\n\nNew_y: {0}", y); Console.WriteLine("\n\nNew_phi: {0}", phi); Console.WriteLine("======================================="); phi = phi*Math.PI/180; while (e != 50 && y != 100 && e<=100 && y<=100&&theta!=0&&phi!=90) EXE( e, y, phi); Console.Read(); } static void Main(string[] args) { double e1, phi1, y1; string temp1, temp2, temp3; Console.Write("1.請輸入X值: "); temp1 = Console.ReadLine(); e1 = System.Convert.ToDouble(temp1); Console.Write("2.請輸入Y值: "); temp3 = Console.ReadLine(); y1 = System.Convert.ToDouble(temp3); Console.Write("3.請輸入φ值: "); temp2 = Console.ReadLine(); phi1 = System.Convert.ToDouble(temp2); EXE(e1, y1, phi1); } } } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.127.208.92 ※ 編輯: ssupermaxx 來自: 59.116.51.211 (01/13 21:29) ※ 編輯: ssupermaxx 來自: 59.116.51.211 (01/14 01:42)
EricTsai:自己F11一步一步跑會看不出來嗎... 01/14 14:01