【发布时间】:2012-06-27 09:52:30
【问题描述】:
我有一般形式a x + b y + c = 0 中的二维线方程,我需要将其转换为正确的斜率截距形式;我的意思是我可以在y = m x + q 和x = m y + q 之间进行选择。
我的想法是检查线条是否出现“更多”水平或垂直,然后选择两种斜率截距形式之一。
这是一个示例代码:
#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 我需要画线,而用于画线的旧代码可以同时接受斜截距形式,因此我需要选择合适的形式。不幸的是,我无法更改旧代码。
标签: c++ algorithm floating-point geometry