2016-06-21 12 views
1

私はいくつかのコードを勉強しています。私はいくつかの数学で助けをしたいと思います。私は与えられた接線の点を持つ円の接線の方程式を解こうとしています。式から変数を抽出する方法は?

//(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); 
} 
+0

なぜそんなに長く書くのですか?単純なマイナスが働くので、 '-1 *'は冗長です。 –

+0

私は方程式からxを抽出するときにそれが正しいと思いますか? – dranec

答えて

1

コードは、最初の行に式を実装していないので、私はあなたがいないことを奇妙だとは思いません

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) しかし、ヨーヨーを:私たちは括弧の乗算のすべての用語を書き出す場合は、我々が得る

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

:-)理解urコードはこれらの用語の半分を失う....?

+0

うん...しかし、それはうまく動作します。だからこそなぜ私に混乱しているのですか? – dranec

+0

多分あなたは、ある座標が常に= 0であるような方法で問題を定義していますか? –

+0

これは愚かな提案でしたが、pxとpy!= 0の場合、すべての座標は!= 0です。方程式はどこから得ましたか? –

関連する問題