如何从等式中提取变量?

时间:2016-06-21 07:39:08

标签: c++ math

我正在学习一些代码,我想帮助一些数学。我试图解决具有给定切点的圆上切线的方程。

//(x1 - p)(x - p) +(y1 - q)(y - q) = r^2 I understand this formula
//variables
//x1 = point.x
//y1 = point.y
//p  = center.x
//q  = center.y
//r  = radius

编辑:这是整个功能,也许会有所帮助。我的老师给了我学习,但也许他在拖我:D

const std::pair<double, double> Arc::tangentEquation(const glm::vec3& center, const glm::vec3& pointA, float radius) const {

  if (radius <= 0.0f)
    throw std::domain_error("Radius can't be negative or 0");
  // Jednadžba tangente u točki T
  // (x1 - p)(x - p) + (y1 - q)(y - q) = r^2
  glm::vec3 point = pointA + center;

  double px = -1 * (center.x * point.x);
  double qy = -1 * (center.y * point.y);
  double x = point.x - center.x;
  double y = point.y - center.y;
  double k = 0.0;

  double l = (pow(radius, 2) - (px + pow(center.x, 2) + qy + pow(center.y, 2)));

  if (y == 0) { // paralelan s x os
    k = l / x;
    l = 0;
  } else if (x == 0) { // paralelan s y os
    l = l / y;
    k = 0;
  } else {
    k = -x / y;
    l = l / y;
  }
  return std::pair<double, double>(k, l);
}

1 个答案:

答案 0 :(得分:1)

代码没有在第一行实现公式,所以我不认为你不明白这是奇怪的: - )

(x1 - p)(x - p) + (y1 - q)(y - q)

如果我们写出括号乘法中的所有项,我们得到:

x1*x - p*x - p*x1 + p^2 + y1*y - q*y - q*y1 + q^2

https://www.youtube.com/watch?v=3s_lroR5_1U非常教学解释) 但是你的代码丢失了这些条款中的一半......?