我有一般形式a x + b y + c = 0
中的二維直線方程,我需要將它轉換爲合適的斜率截距形式;正確的我的意思是我可以選擇y = m x + q
和x = m y + q
。如何在C++中將一般形式的二維直線方程轉換爲斜率截取形式
我的想法是檢查該行是否出現「更多」水平或垂直,並因此選擇兩個斜率截距表單中的一個。
這是一個示例代碼:
#include <iostream>
#include <cmath>
void abc2mq(double a, double b, double c, double& m, double& q, bool& x2y)
{
if (fabs(b) >= fabs(a)) {
x2y = true;
m = -a/b;
q = -c/b;
} else {
x2y = false;
m = -b/a;
q = -c/a;
}
}
void test(double a, double b, double c)
{
double m,q;
bool x2y;
abc2mq(a, b, c, m, q, x2y);
std::cout << a << " x + " << b << " y + " << c << " = 0\t";
if (x2y) {
std::cout << "y = " << m << " x + " << q << "\n";
} else {
std::cout << "x = " << m << " y + " << q << "\n";
}
}
int main(int argc, char* argv[])
{
test(0,0,0);
test(0,0,1);
test(0,1,0);
test(0,1,1);
test(1,0,0);
test(1,0,1);
test(1,1,0);
test(1,1,1);
return 0;
}
這是輸出
0 x + 0 y + 0 = 0 y = -1.#IND x + -1.#IND
0 x + 0 y + 1 = 0 y = -1.#IND x + -1.#INF
0 x + 1 y + 0 = 0 y = -0 x + -0
0 x + 1 y + 1 = 0 y = -0 x + -1
1 x + 0 y + 0 = 0 x = -0 y + -0
1 x + 0 y + 1 = 0 x = -0 y + -1
1 x + 1 y + 0 = 0 y = -1 x + -0
1 x + 1 y + 1 = 0 y = -1 x + -1
任何不同的或更好的主意嗎?特別是,我如何處理前兩個「退化」線?
你爲什麼需要這樣做? –
@AndreasBrinck我需要繪製線條,並且用於繪製線條的遺留代碼可以接受兩種斜率截取形式,所以我需要選擇合適的一種。不幸的是我不能改變遺留代碼。 –