几何
文章平均质量分 57
CCSU_Seth
这个作者很懒,什么都没留下…
展开
-
C语言平面几何1-数据类型的定义
数学中的部分概念在C语言中的定义如下(注:为了与数学一致,有些参数使用了大写):/* 点 */typedef struct point{ double x; double y;}Point;/* 向量 */typedef Point Vector;/* 线段AB */typedef struct segment{ Point A; Point B;}Segment;转载 2013-12-17 17:12:30 · 684 阅读 · 0 评论 -
C语言平面几何9-两直线的交点
求平面中两直线的交点,当两直线不平行时,必定只有一个交点。/* 返回两直线的交点 */Point LinesIntersection(Line m, Line n, int *flag){ double d = n.A * m.B - m.A * n.B; if (d == 0) { *flag = 0; return; } Point i; i.x = (n.B *转载 2013-12-17 17:21:40 · 977 阅读 · 0 评论 -
C语言平面几何7-直线与圆的位置关系
直线与圆的位置关系有3种:1,相离,有0个交点2,相切,只有1个交点3,相交,有2个交点C语言代码如下:// 直线与圆的位置关系:0-相离,1-相切,2-相交int LineAndCircle(Line l, Circle c){ double d = DistanceOfPointToLine(c.centre, l); double r = c.radius; i转载 2013-12-17 17:19:43 · 1388 阅读 · 0 评论 -
C语言平面几何6-判断线段是否与矩形范围有交集
判断线段AB是否与矩形范围有交集这里的矩形指的是边与坐标轴平行的矩形,可用x和y上最大最小值表示。判断是否相交,先快速排斥,再做跨立,通过向量的叉积判断矩形的四个顶点是否在线段的两侧,是说明有交集。(如果判断与矩形的边是否有交集的话,可判断线段是否与矩形的每条边是否有交集,线段与线段的交集判断。) 这里在介绍另外一种方法,降维的方法:例如,有线段AB和矩形MN,如图所示:转载 2013-12-17 17:18:52 · 757 阅读 · 0 评论 -
C语言平面几何14-三角形的面积
求三角形ABC的面积S。1)S=底*高/22)S2=p*(p-a)*(p-b)*(p-c),其中p=(a+b+c)/2C语言代码:/* 三角形的面积: 底*高/2 */double AreaOfTriangle(Triangle t){ Line l = LineMake(t.A, t.B); double d = DistanceOfPoints(t.A, t.B);转载 2013-12-17 17:26:20 · 758 阅读 · 0 评论 -
C语言平面几何10-点到直线的垂点
求点A(x0, y0)到直线Ax+By+C=0的垂点B(x1, y1),满足两个条件:(1)Ax1+By1+C=0,点B在直线上(2)(y1-y0)/(x1-x0) * A/B=1,两线垂直,斜率k1 * k2 = -1。注:判断两直线垂直的方法有(1)A1A2+B1B2=0,(2)k1*k2 = -1。/* 计算点到直线的垂点 */Point VerticalPoint(P转载 2013-12-17 17:23:12 · 823 阅读 · 0 评论 -
C语言平面几何13-两直线的夹角
平面几何中,两直线的夹角定义为两条直线所形成的不大于90度的角。两直线夹角θ:tgθ=|(k2-k1)/(1+k1*k2)|,k1、k2分别为两直线的斜率直线A1x+B1y+C1=0和A2y+B2y+C2=0的夹角θ:tgθ=|(A1B2-A2B1)/(A1A2+B1B2)|。C语言代码:/* 两直线的夹角,返回角度值,非弧度值 */double IncludedAngl转载 2013-12-17 17:25:35 · 2037 阅读 · 0 评论 -
C语言平面几何8-两直线的位置关系
平面中,两直线不相交就平行,相交中又分垂直相交和非垂直相交,两直线重合可认为是特殊的平行。C语言代码如下:/* 两直线的关系 * 平面中,两直线不相交就平行 */int TwoLines(Line m, Line n){ // 平行:A1/B1 = A2/B2 if (m.A * n.B == m.B * n.A) { // 两直线斜率相同 if (m.C * n.B转载 2013-12-17 17:20:49 · 801 阅读 · 0 评论 -
C语言平面几何5-两点确定一条直线
/* 两个不同点A,B确定一条直线,AB相同返回的值全0 * 直线方程:Ax+By+c=0 * A = y2 - y1; * B = x1 - x2; * C = -A*x1 - B*y1 = x2*y1 - x1*y2; */Line LineMake(Point A, Point B){ Line l; l.A = B.y - A.y; l.B = A.x - B.转载 2013-12-17 17:17:26 · 1912 阅读 · 0 评论 -
C语言平面几何3-点是否在线段上
判断点P是否在线段AB上方法很多,这里给出两种。(1)通过距离判断,点P在线段AB上|AP|+|PB|=|AB|(2)通过向量叉积判断,点在线段上向量AP×向量AB=0,并且点P坐标在AB坐标之间C语言代码如下:/* 点是否在线段上: 距离判断 */int PointIsOnSegment(Point P, Point A, Point B){ double d1 = Dis转载 2013-12-17 17:14:02 · 958 阅读 · 0 评论 -
C语言-向量基本概念
向量:既有大小又有方向的量叫向量。向量的模:向量的长度称为向量的模,用符号| |表示。零向量:长度为0的向量单位向量:长度为1的向量平面中,设有向量a={x1, y1},向量b={x2, y2},则有(1) 向量的加:a+b={x1+x2, y1+y2}(2) 向量的减:a-b={x1-x2, y1-y2}(3) 向量的点积(内积):转载 2013-12-17 17:10:26 · 3095 阅读 · 0 评论 -
C语言平面几何19-三角形的重心和垂心
三角形的重心:三角形三条中线的交点。该交点到顶点的距离是到对边中点距离的2倍。三角形的垂心:三角形三条高的交点。/* 三角形的重心 */Point BaryCenter(Triangle t){ // 三条中线的交点 Point m = MiddlePoint(t.B, t.C); Line l1 = LineMake(t.A, m); Point n = MiddlePo转载 2013-12-17 17:30:47 · 1102 阅读 · 0 评论 -
C语言平面几何18-三角形的内心和内切圆
三角形的内心,就是其内切圆的圆心。三角形三内角平分线相交于一点,该点即为内心。/* 三角形的内心 */Point Incenter(Triangle t){ Line l1 = AngleBisector(t.A, t.B, t.C); Line l2 = AngleBisector(t.B, t.A, t.C); int flag; return LinesIntersectio转载 2013-12-17 17:29:44 · 1042 阅读 · 0 评论 -
C语言平面几何17-角平分线
角平分线的求解思路,如图,求∠ABC的角平分线:(1)在BC(或BC的延长线)上取一点D,使|AB|=|BD|。(2)求线段AD的中点E,则直线BE即为∠ABC的角平分线。点D的坐标可以根据三角形相似来求解,如x满足|BD|/|BC|=(D.x-B.x)/(C.x-B.x)。/* 角平分线,输入:角ABC<180度 */Line AngleBisector(Point A,转载 2013-12-17 17:29:06 · 864 阅读 · 0 评论 -
C语言平面几何16-三角形的外心和外接圆
三角形的外心,就是其外接圆的圆心。三角形三边的垂直平分线相交于一点,该点即为外心。/* 三角形的外心 */Point Excenter(Triangle t){ Line l1 = PerpendicularBisector(t.A, t.B); Line l2 = PerpendicularBisector(t.A, t.C); int flag; return LinesInt转载 2013-12-17 17:28:22 · 879 阅读 · 0 评论 -
C语言平面几何15-线段的垂直平分线
线段AB的垂直平分线:先求中点M,再根据线段AB的斜率k1求出直线的斜率k2,k1*k2=-1,最后求出线段的方程:kx-y+C=0。/* 线段的垂直平分线 */Line PerpendicularBisector(Point A, Point B){ Point m; // 中点 m.x = (A.x + B.x)/2; m.y = (A.y + B.y)/2; Line转载 2013-12-17 17:27:45 · 1199 阅读 · 0 评论 -
C语言平面几何11-点关于直线的对称点
求点P(x0, y0)关于直线Ax+Bx+C=0的对称点M(x1, y1),满足两个条件:(1)线段PM的中点在直线上(2)PM与直线垂直/* 点关于直线的对称点 */Point SymmetricalPoint(Point p, Line l){ Point s; double tmp = l.A * l.A + l.B * l.B; s.x = (l.B *l.B*p转载 2013-12-17 17:23:55 · 925 阅读 · 0 评论 -
C语言平面几何4-两线段是否相交
判断两线段是否相交:方法(1):快速排斥(两个MBR是否有交集)+跨立(一个线段的两个端点在另一线段的两端)。给出C语言代码如下:/* * 由两个点构造一个向量 */Vector VectorConstruct(Point A, Point B){ Vector v; v.x = B.x - A.x; v.y = B.y - A.y; return v;}//转载 2013-12-17 17:15:15 · 941 阅读 · 0 评论 -
C语言平面几何12-向量方法判断线段与矩形是否有交集
向量方法判断线段与矩形是否有交集,通过向量叉乘的结果正负来判断,当矩形在线段的某一侧时,叉乘的结果要么全正,要么全负,此时无交集。判断有2步:1)快速排斥,2)叉乘。int RSIntersection(Rectangle r, Point A, Point B){ MBR m1 = (MBR)r; MBR m2 = MbrConstruct(A, B); // 快速排斥 if转载 2013-12-17 17:24:54 · 860 阅读 · 0 评论