用面向对象的思维设计相关类,从而实现直线与直线、直线与圆、直线与矩形的交点。
本文面向的对象为:
准备自己实现代码,但是找不到高效的数学方法的同学。
本文没有贴代码
本文中判断矩形与直线交点的方法应该是只用初中数学水平中最高效的。
首先直线与直线很简单就不说了。
直线与圆:
两种方法:1.直线以参数方程形式带入圆方程联立。
参数方程形式的好处为:可以简化计算。同时,求出t后,只需用x1=x0+t1,x2=x0+t2即可算出两个点的坐标。
2.用标准方程带入圆的方程计算
好处为不用三角函数,数值更为准确。
直线与矩形:
直线与矩形,其实就是直线与线段的交点。
根据计算几何中的思想,只需要线段跨立这条直线即可。那么有没有简单的方法判断线段是否跨立直线?
有。
首先判断直线与线段是否相交
思考过程:线段给出的形式是两个点。根据这个特征,
一般会想到向量或者直接使用点的坐标。
那么向量一般来说是自由向量,所以在线段上面使用不方便。
那么就直接使用两个点的方法。
我们看一下通过跨立实验的形式
判断直线与线段的判定方法要相对简单。只需要初中知识即可。
设线段的两点为(x0,y0),(x1,y1) 直线为y=kx+m
直线会把平面划分成两部分。则只需要判断两点是否分别在直线两端即可。
将点带入,若kx0+m>y0则在上端。非常简单即可验证是否相交。
验证相交之后再用两点式即可写出直线方程然后求交点。
面向对象构建
1.首先他们都叫曲线,都有自己的方程或者方程组(矩形)
那么
最后用多态,在曲线内设计求交虚函数,子类实现即可
最后,其实这个作业,由于他题目表述不清楚,我们可以以管理A级别的理解把矩形简化成平行与坐标轴的矩形
那么,与矩形重合:过两个不同的角点,且直线k=0或者没有k,
与矩形有一个交点==矩形的四角中一个在直线上(直线过矩形的一个角)或者最简单的方法矩形两对 对角点 全部在直线一侧
有两个交点至少有一对 对角点 在直线两侧
关于斜穿过直线的判断:
斜穿是指穿过相邻的两边,那么有且只有一对 对角点在直线两侧,另一对对角点在直线同一侧。
关于直穿,则两对对角点都在直线两侧。那么关于直线的判断总结如下:
(x0,y0)设为在对角点中位于上方的角点
过一点:两对对角点都不满足 kx0+m>y0 && kx1+m<=y0(注意左边没等号)
重合:两对对角点都不满足 上式且 k=0或者没有k
斜穿:有且只有一对对角点满足上式
直穿:两对 对角点都满足上式