美文网首页
iOS计算过圆心直线与圆的交点

iOS计算过圆心直线与圆的交点

作者: 阑丶夜 | 来源:发表于2018-06-19 17:33 被阅读0次

主要计算公式:

直线的一般方程      y = kx + b;

圆的一般方程        x^2 + y^2 + Dx + Ey + F = 0;

圆的基本系数关系     r = (根号(D^2 + E^2 - 4F))/2

一元二次方程求根公式    x = -b (+/-) (根号(b^2 - 4ac)) / 2a

/**

 计算圆环上取色点,解任意点过圆心的直线与圆的交点取其一

 @param pointOne 任意点

@param circleCenterPoint 圆心

 */

- (CGPoint)calculateColorPointWithPoint:(CGPoint)pointOne circleCenterPoint:(CGPoint)circleCenterPoint

{

    //由于OC坐标系与数学坐标系的差异,y值取反,转成数学坐标系

    CGPointtemp1 = pointOne;

    CGPointtemp2 = circleCenterPoint;

    pointOne =CGPointMake(temp1.x, -temp1.y);

    circleCenterPoint =CGPointMake(temp2.x, -temp2.y);

    //计算过圆心直线斜率和常数b

    lineK= (CGFloat)(pointOne.y- circleCenterPoint.y) / (CGFloat)(pointOne.x- circleCenterPoint.x);

    lineB= circleCenterPoint.y-lineK*circleCenterPoint.x;

    //计算圆的方程常数  其圆心坐标(-D/2, -E/2)  半径公式 r = (根号(D^2 + E^2 - 4F))/2

    CGFloatcircleR = circleCenterPoint.x-4;//圆的半径,取圆环的中间值

    circleD= -2* circleCenterPoint.x;

    circleE= -2* circleCenterPoint.y;

    circleF= (powf(circleD,2) +powf(circleE,2) -4*powf(circleR,2))/4.0;

    //一元二次方程求根公式    x = -b (+/-) (根号(b^2 - 4ac)) / 2a

    CGFloata = (1+powf(lineK,2));

    CGFloat b = (2*lineK*lineB + circleD + circleE*lineK);

    CGFloat c = powf(lineB, 2) + circleE*lineB + circleF;

    //直线与圆的两个交点

    CGFloatx1 = ((-b) +sqrtf(powf(b,2) -4*a*c)) / (2*a);

    CGFloaty1 =lineK*x1 +lineB;

    CGFloatx2 = ((-b) -sqrtf(powf(b,2) -4*a*c)) / (2*a);

    CGFloaty2 =lineK*x2 +lineB;

    //当过圆心直线斜率不存在时

    if(pointOne.x== circleCenterPoint.x) {

        x1 = circleCenterPoint.x;

        y1 = -4;

        x2 = circleCenterPoint.x;

        y2 = -(2*circleR +4);

    }

    //两个交点点到触发点的距离

    CGFloatdistance1 =sqrtf(powf(x1 - pointOne.x,2) +powf(y1 - pointOne.y,2));

    CGFloatdistance2 =sqrtf(powf(x2 - pointOne.x,2) +powf(y2 - pointOne.y,2));

    //选择距离近的, 由于OC坐标系与数学坐标系的差异,y值取反转成OC坐标系

    CGPointintersectPoint1 =CGPointMake(x1, -y1);

    CGPointintersectPoint2 =CGPointMake(x2, -y2);

    if(distance1 < distance2) {

        returnintersectPoint1;

    }

    else{

        returnintersectPoint2;

    }

}

相关文章

  • 直线与圆的位置关系

    直线与圆,交点,圆心到直线的距离d与半径r 相切……1,

  • iOS计算过圆心直线与圆的交点

    主要计算公式: 直线的一般方程 y = kx + b; 圆的一般方程 x^2 + y^2 + Dx + ...

  • 2017-11-29

    相切,说明线圆只有一个交点,设为点P,点P既在直线上,也在圆周上,此时圆心到交点的距离为r,直线上其余点都在圆外,...

  • 一道简单的算法题

    已知A,B坐标,且A为圆心,求圆与AB连线的交点坐标

  • 2017-11-29

    圆心到直线的距离等于半径时,说明垂足在圆周上,那么直线其余点到圆心距离都大于半径,因此其余点都在圆外,直线与圆只有...

  • Euclidea Delta-2

    过直线外一点 C,做与已知直线夹角为 60° 的直线。 3 魔做法 以 C 为圆心做圆,与给出的直线交于点 D、F...

  • 公式

    1.立体几何外接球的半径公式 2.三角形心的定义与计算 外心:外接圆的圆心,垂直平分线的交点 内心:内切圆的圆心,...

  • 计算线圆交点

    基本思路是先求过圆心的直线的垂线,在判断点线距离和半径的大小来判断有没有交点,如果有交点,用与垂线的交点加上或减去...

  • 关于圆的基本性质和定理

    圆是轴对称图形,其对称轴是任意一条过圆心的直线。 圆是中心对称图形,对称中心是圆心。 在同圆或等圆中,如果两个圆心...

  • 高考理数解析几何大题:福建广东辽宁卷2011年到2015年

    2011年理数福建卷题17 分值:13分 已知直线 . (I)若以点 为圆心的圆与直线 相切于点 ,且点 在...

网友评论

      本文标题:iOS计算过圆心直线与圆的交点

      本文链接:https://www.haomeiwen.com/subject/cafzeftx.html