判別式・2点を通る直線・2次方程式の解(x1,x2)

f:id:peroon:20200602002539p:plain

タイトルにある3つを関数化した

// 判別式
ll discriminant(ll a, ll b, ll c){
  return b*b - 4*a*c;
}

// 2次方程式の解(x1, x2)
pair<ld,ld> quadratic_equation(ll a, ll b, ll c){
  ll D = discriminant(a,b,c);
  ld x1 = (-b-sqrt(D))/(2*a);
  ld x2 = (-b+sqrt(D))/(2*a);
  return {x1,x2};
}

// 2点を通る直線を求める(係数 (a,b) を返す)
// y = ax + b
pair<ld,ld> line_from_two_point(ld x1, ld y1, ld x2, ld y2){
  if(x1==x2){
    // y軸と平行な直線
    cerr << "TODO"; exit(0);
  }
  if(y1==y2){
    // x軸と平行な直線
    return {0, y1};
  }
  // 傾き
  ld tilt = (y2-y1)/(x2-x1);
  ld a = tilt;
  ld b = a * (-x1) + y1;
  return {a,b};
}

verified