# 直線方程式與向量 ## 直線方程式 ### **國中 :** 已知通過 **(X~1~,Y~1~) , (X~1~,Y~1~)** 設兩點通過 **Y=aX+b** ,其中 **a,b**為未知數 接者解聯立方程式,求出直線方程式 ### **高一 :** 已知 **斜率** 概念,透過 : 點斜式 : **Y-Y~0~ = m(X-X~0~)** 截距式 : **X/a+Y/b=1** 兩點式 : **X-X~1~/X~2~-X~1~ = Y-Y~1~/Y~2~-Y~1~** 求出直線方程式 ### **高二 :** 已知 **向量** 概念 : 透過==參數式==表示直線 ### 參數式推導&範例 直線 **L** 方向向量 **{V|⇀}(13,17)** 過點 **A(-3,-4)** 設**P(x,y)**為**L**上任意點 ⇔ **{AP|⇀}**//**{V|⇀}** ⇔ **{AP|⇀}**//**t{V|⇀}**, **t**為實數 ⇔ **{OP|⇀} − {OA|⇀}** = **t{V|⇀}** ,**t**為實數 (O為原點) ⇔ **{OP|⇀} = {OA|⇀}** + **t{V|⇀}** ,**t**為實數 **P(x,y) = A(-3,-4) + t(13,17)** 直線 **L** 的方向向量 **{V|⇀}=(a,b)**,**L**過點**P(x~0~,y~0~)** **L**的**直線參數式** : (**t**為參數) **x=x~0~+at** **y=y~0~+bt** ## 克拉瑪公式 ### 推導 **二元一次方程組 :** (其中 **X** , **Y** 為未知數) **a~1~X+b~1~Y=c~1~** ... **(1)** **a~2~X+b~2~Y=c~2~** ... **(2)** 利用**加減消去法** : **(1)** × **b~2~** - **(2)** × **b~1~** ⇒ **(a~1~b~2~−a~2~b~1~)X** = **(c~1~b~2~−c~2~b~1~)** **(1)** × **a~2~** - **(2)** × **a~1~** ⇒ **(a~2~b~1~−a~1~b~2~)y** = **(c~1~a~2~−c~2~a~1~)** 可得 : **∆ ⋅ X**= ==**∆~x~**== **∆ ⋅ Y**= ==**∆~y~**== | ∆ | ∆~x~ | ∆~y~ | | -------- | -------- | -------- | | \ ^a1^~a2~ ^b1^~b2~ \ | \ ^c1^~c2~ ^b1^~b2~ \ | \ ^a1^~a2~ ^c1^~c2~ \ | | a~1~b~2~ - a~2~b~1~ | c~1~b~2~ - c~2~b~1~ | a~1~c~2~ - a~2~c~1~ | ### 是否有解 * 當 **∆ ≠ 0** 時 : 方程組**恰有一組解** : ( X,Y ) = ( **∆~x~/∆** , **∆~y~/∆** ) * 當 **∆ = ∆~x~ = ∆~y~ = 0** 時 : 方程組**無限多組解** * 當 **∆ = 0 且 ∆~x~^2^ + ∆~y~^2^ ≠ 0** 時 : 方程組**無解** ### 轉為程式碼 [Run my code online](https://repl.it/@jason810496/Cramers-rule#main.cpp) ```c #include <bits/stdc++.h> using namespace std; int a1,b1,c1,a2,b2,c2,delta,delta_x,delta_y; void ans_x(){ int dx=delta_x,d=delta; if(d<0&&dx<0) d=abs(d),dx=abs(dx); else if(d<0&&dx>0) d=-d,dx=-dx; int temp=gcd(d,dx); d/=temp,dx/=temp; cout<<"X: "; if(d==1&&dx==1) cout<<"1\n"; else if(dx==0) cout<<"0\n"; else{ cout<<dx<<"/"<<d<<'\n'; } } void ans_y(){ int dy=delta_y,d=delta; if(d<0&&dy<0) d=abs(d),dy=abs(dy); else if(d<0&&dy>0) d=-d,dy=-dy; int temp=gcd(d,dy); d/=temp,dy/=temp; cout<<"Y: "; if(d==1&&dy==1) cout<<"1\n"; else if(dy==0) cout<<"0\n"; else{ cout<<dy<<"/"<<d<<'\n'; } } void input(){ char none; string s1,s2,no; stringstream ss; cout<<"Input system of linear equations :\nin the form of : (a1,b1...need to be Integer)\na1X+b1Y=c1\na2X+b2Y=c2\n\n"; getline(cin,s1),getline(cin,s2); ss.str(s1); ss>>a1>>none>>none>>b1>>none>>none>>c1; ss.clear(); ss.str(s2); ss>>a2>>none>>none>>b2>>none>>none>>c2; ss.clear(); } void process_data(){ delta= a1*b2-a2*b1; //cout<<delta<<'\n'; delta_x= c1*b2-c2*b1; //cout<<delta_x<<'\n'; delta_y= a1*c2-a2*c1; //cout<<delta_y<<'\n'; } void check(){ if(delta!=0){ cout<<"The system has a single unique solution.\n"; ans_x(); ans_y(); } else{ if(delta_x!=0||delta_y!=0){ cout<<"The system has no solution.\n"; } else{ cout<<"The system has infinitely many solutions.\n"; } } } int main(){ input(); process_data(); check(); return 0; } ```