本文記錄了關(guān)于求直線斜率及縱截距值的簡單方法,只是簡單的記錄下求解思路,最終還需根據(jù)具體項(xiàng)目進(jìn)行優(yōu)化。
設(shè)直線方程式為:y=kx+b
編程思想:
1、代入y1與x1的值,得到:y1=kx1+b
2、代入y2與x2的值,得到:y2=kx2+b
3、首先算出一個(gè)系數(shù)m=kx1 / kx2 或 m=kx2 / kx1
4、根據(jù)第三步,將 y1=kx1+b 或 y2=kx2+b 乘以系數(shù)m,使 kx1==kx2 ,注意 kx1與kx2不能為0
4、將2個(gè)函數(shù)相減,例如:my2-my1=mb-b 即 m(y2-y1)=(m-1)b
5、算出縱截距b=(m(y2-y1))/(m-1) 注意:m不能為1 同時(shí)注意浮點(diǎn)數(shù)四舍五入問題
6、將b值y1=kx1+b中,求出斜率k值
示例代碼:
using System;namespace Demo{ class PRogram { private static readonly int _decimaldigits = 2;//小數(shù)位數(shù)保留2位 /// <summary> /// 計(jì)算斜率k及縱截距b值 /// </summary> /// <param name="x1">坐標(biāo)點(diǎn)x1</param> /// <param name="x2">坐標(biāo)點(diǎn)x2</param> /// <param name="y1">坐標(biāo)點(diǎn)y1</param> /// <param name="y2">坐標(biāo)點(diǎn)y2</param> /// <param name="kvalue">斜率k值</param> /// <param name="bvalue">縱截距b值</param> private static void Calculate(float x1, float x2, float y1, float y2, ref float kvalue, ref float bvalue)//求方程y=kx+b 系數(shù) k ,b { float coefficient = 1;//系數(shù)值 try { if ((x1 == 0) || (x2 == 0) || (x1 == x2)) return; //排除為零的情況以及x1,x2相等時(shí)無法運(yùn)算的情況 //if (y1 == y2) return; //根據(jù)具體情況而定,如何這兩個(gè)值相等,得到的就是一條直線 float temp = 0; if (x1 >= x2) { coefficient = (float)Math.Round((x1 / x2), _decimaldigits); temp = y2 * coefficient; //將對(duì)應(yīng)的函數(shù)乘以系數(shù) bvalue = (float)Math.Round(((temp - y1) / (coefficient - 1)), _decimaldigits); kvalue = (float)Math.Round(((y1 - bvalue) / x1), _decimaldigits); //求出k值 } else { coefficient = x2 / x1; temp = y1 * coefficient; bvalue = (float)Math.Round(((temp - y2) / (coefficient - 1)), _decimaldigits);//求出b值 kvalue = (float)Math.Round(((y2 - bvalue) / x2), _decimaldigits); //求出k值 } } catch { Console.WriteLine("x系數(shù)不能為0或相等"); } } static void Main(string[] args) { float x1 = 0; float y1 = 0; float x2 = 0; float y2 = 0; float kvalue = 0; float bvalue = 0; Console.WriteLine("計(jì)算直線斜率k及縱截距b"); Console.WriteLine("請(qǐng)輸入x1值"); x1 = Convert.ToSingle(Console.ReadLine()); Console.WriteLine("請(qǐng)輸入y1值"); y1 = Convert.ToSingle(Console.ReadLine()); Console.WriteLine("請(qǐng)輸入x2值"); x2 = Convert.ToSingle(Console.ReadLine()); Console.WriteLine("請(qǐng)輸入y2值"); y2 = Convert.ToSingle(Console.ReadLine()); Calculate(x1, x2, y1, y2, ref kvalue, ref bvalue); Console.WriteLine("直線方程為:y={0}x+{1}", kvalue, bvalue); Console.ReadKey(); } }}
運(yùn)行結(jié)果:

新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注