7.3 给定直角坐标系上的两条线,确定这两条线会不会相交。
解法:
此题有很多不确定的地方:两条线的格式是什么?两条线实为同一条怎么处理?这些含糊不清的地方最好跟面试官讨论一下。
下面将做出以下假设:
若两条线是相同的(斜率和y轴截距相等),则认为这两条线相交;
两条线若不平行则必相交。因此,要检查两条线相交与否,我们只需检查两者的斜率是否相同,或是否为同一条。
实现代码:
#include<iostream> #include<cmath> using namespace std; class line{ public: static double epsilon; double slope; double yintercept; line(double s,double y):slope(s),yintercept(y){} bool intersect(line line2) { //满足两个条件一定相交,第一是斜率不相等,第二是斜率相等但是截距也相等 return abs(slope-line2.slope)>epsilon||abs(yintercept-line2.yintercept)<epsilon; } }; double line::epsilon=0.000001; int main() { line line1(1,2); line line2(1,2); cout<<line1.intersect(line2)<<endl; }