Determine if two circles overlap in iOS
Last Update:2015-08-01
Source: Internet
Author: User
<span id="Label3"></p><pre>#import <Foundation/Foundation.h><span style="color: #000000;"><span style="color: #000000;">#import</span></span><math.h><span style="color: #000000;"><span style="color: #000000;">@interface point2d:nsobject{</span></span><span style="color: #0000ff;"><span style="color: #0000ff;">Double</span></span>_x;<span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;"><span style="color: #008000;">x Value</span></span> <span style="color: #0000ff;"><span style="color: #0000ff;">Double</span></span>_y;<span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;"><span style="color: #008000;">y value</span></span><span style="color: #000000;"><span style="color: #000000;">}</span></span><span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;"><span style="color: #008000;">getter and setter for X-values</span></span>- (<span style="color: #0000ff;"><span style="color: #0000ff;">void</span></span>) SetX: (<span style="color: #0000ff;"><span style="color: #0000ff;">Double</span></span><span style="color: #000000;"><span style="color: #000000;">) x;</span></span>- (<span style="color: #0000ff;"><span style="color: #0000ff;">Double</span></span><span style="color: #000000;"><span style="color: #000000;">) x;</span></span><span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;"><span style="color: #008000;">getter and setter for Y-values</span></span>- (<span style="color: #0000ff;"><span style="color: #0000ff;">void</span></span>) Sety: (<span style="color: #0000ff;"><span style="color: #0000ff;">Double</span></span><span style="color: #000000;"><span style="color: #000000;">) y;</span></span>- (<span style="color: #0000ff;"><span style="color: #0000ff;">Double</span></span><span style="color: #000000;"><span style="color: #000000;">) y;</span></span><span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;"><span style="color: #008000;">set both X and Y</span></span>- (<span style="color: #0000ff;"><span style="color: #0000ff;">void</span></span>) SetX: (<span style="color: #0000ff;"><span style="color: #0000ff;">Double</span></span>) x andY: (<span style="color: #0000ff;"><span style="color: #0000ff;">Double</span></span><span style="color: #000000;"><span style="color: #000000;">) y;</span></span><span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;"><span style="color: #008000;">Calculate root other point distance</span></span>- (<span style="color: #0000ff;"><span style="color: #0000ff;">Double</span></span>) Distancewithother: (POINT2D *<span style="color: #000000;"><span style="color: #000000;">) other;</span></span><span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;"><span style="color: #008000;">class method calculates the distance between two points</span></span>+ (<span style="color: #0000ff;"><span style="color: #0000ff;">Double</span></span>) distanceWithOther1: (point2d *) p1 andPoint2: (point2d *<span style="color: #000000;"><span style="color: #000000;">) p2, @end @implementation point2d</span></span><span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;"><span style="color: #008000;">getter and setter for X-values</span></span>- (<span style="color: #0000ff;"><span style="color: #0000ff;">void</span></span>) SetX: (<span style="color: #0000ff;"><span style="color: #0000ff;">Double</span></span><span style="color: #000000;"><span style="color: #000000;">) x{</span> self</span>->_x =<span style="color: #000000;"><span style="color: #000000;">x;}</span></span>- (<span style="color: #0000ff;"><span style="color: #0000ff;">Double</span></span><span style="color: #000000;"><span style="color: #000000;">) x{</span></span><span style="color: #0000ff;"><span style="color: #0000ff;">return</span></span><span style="color: #000000;"><span style="color: #000000;">_x;}</span></span><span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;"><span style="color: #008000;">getter and setter for Y-values</span></span>- (<span style="color: #0000ff;"><span style="color: #0000ff;">void</span></span>) Sety: (<span style="color: #0000ff;"><span style="color: #0000ff;">Double</span></span><span style="color: #000000;"><span style="color: #000000;">) y{</span> self</span>->_y =<span style="color: #000000;"><span style="color: #000000;">y;}</span></span>- (<span style="color: #0000ff;"><span style="color: #0000ff;">Double</span></span><span style="color: #000000;"><span style="color: #000000;">) y{</span></span><span style="color: #0000ff;"><span style="color: #0000ff;">return</span></span><span style="color: #000000;"><span style="color: #000000;">_y;}</span></span><span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;"><span style="color: #008000;">set both X and Y</span></span>- (<span style="color: #0000ff;"><span style="color: #0000ff;">void</span></span>) SetX: (<span style="color: #0000ff;"><span style="color: #0000ff;">Double</span></span>) x andY: (<span style="color: #0000ff;"><span style="color: #0000ff;">Double</span></span><span style="color: #000000;"><span style="color: #000000;">) y{[self setx:x]; [self sety:y];}</span></span><span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;"><span style="color: #008000;">calculate the distance between two points</span></span>- (<span style="color: #0000ff;"><span style="color: #0000ff;">Double</span></span>) Distancewithother: (POINT2D *<span style="color: #000000;"><span style="color: #000000;">) other{</span></span><span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;"><span style="color: #008000;">return [point2d distancewithother1:self andpoint2:other];</span></span> <span style="color: #0000ff;"><span style="color: #0000ff;">Double</span></span>XDelta = [self x]-<span style="color: #000000;"><span style="color: #000000;">[other x]; </span></span><span style="color: #0000ff;"><span style="color: #0000ff;">Double</span></span>XDELTAPF = Pow (xDelta,<span style="color: #800080;"><span style="color: #800080;">2</span></span><span style="color: #000000;"><span style="color: #000000;">); </span></span><span style="color: #0000ff;"><span style="color: #0000ff;">Double</span></span>Ydelta = [self y]-<span style="color: #000000;"><span style="color: #000000;">[other y]; </span></span><span style="color: #0000ff;"><span style="color: #0000ff;">Double</span></span>YDELTAPF = Pow (ydelta,<span style="color: #800080;"><span style="color: #800080;">2</span></span><span style="color: #000000;"><span style="color: #000000;">); </span></span><span style="color: #0000ff;"><span style="color: #0000ff;">return</span></span>SQRT (xdeltapf +<span style="color: #000000;"><span style="color: #000000;">ydeltapf);}</span></span><span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;"><span style="color: #008000;">class method calculates the distance between two points</span></span>+ (<span style="color: #0000ff;"><span style="color: #0000ff;">Double</span></span>) distanceWithOther1: (point2d *) p1 andPoint2: (point2d *<span style="color: #000000;"><span style="color: #000000;">) p2{</span></span><span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;"><span style="color: #008000;">to invoke a pair method in a class method</span></span> <span style="color: #0000ff;"><span style="color: #0000ff;">return</span></span><span style="color: #000000;"><span style="color: #000000;">[P1 distancewithother:p2];} @end @interface circle:nsobject{</span></span><span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;"><span style="color: #008000;">radius</span></span> <span style="color: #0000ff;"><span style="color: #0000ff;">Double</span></span><span style="color: #000000;"><span style="color: #000000;">_radius; </span></span><span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;"><span style="color: #008000;">Center</span></span>POINT2D *<span style="color: #000000;"><span style="color: #000000;">_point;}</span></span><span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;"><span style="color: #008000;">getter and setter of radius</span></span>- (<span style="color: #0000ff;"><span style="color: #0000ff;">void</span></span>) Setradius: (<span style="color: #0000ff;"><span style="color: #0000ff;">Double</span></span><span style="color: #000000;"><span style="color: #000000;">) radius;</span></span>- (<span style="color: #0000ff;"><span style="color: #0000ff;">Double</span></span><span style="color: #000000;"><span style="color: #000000;">) radius;</span></span><span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;"><span style="color: #008000;">getter and setter at the center</span></span>- (<span style="color: #0000ff;"><span style="color: #0000ff;">void</span></span>) Setpoint: (POINT2D *<span style="color: #000000;"><span style="color: #000000;">) point;</span></span>-(POINT2D *<span style="color: #000000;"><span style="color: #000000;">) point;</span></span><span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;"><span style="color: #008000;">determine if two circles overlap</span></span><span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;"><span style="color: #008000;">class Method</span></span>+ (BOOL) isInteractBetweenCircle1: (circle *) C1 andCircle2: (circle *<span style="color: #000000;"><span style="color: #000000;">) c2;</span></span><span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;"><span style="color: #008000;">Object Methods</span></span>-(BOOL) isinteractbetweencircle: (Circle *<span style="color: #000000;"><span style="color: #000000;">) other; @end @implementation Circle</span></span><span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;"><span style="color: #008000;">getter and setter of radius</span></span>- (<span style="color: #0000ff;"><span style="color: #0000ff;">void</span></span>) Setradius: (<span style="color: #0000ff;"><span style="color: #0000ff;">Double</span></span><span style="color: #000000;"><span style="color: #000000;">) Radius{_radius</span></span>=<span style="color: #000000;"><span style="color: #000000;">radius;}</span></span>- (<span style="color: #0000ff;"><span style="color: #0000ff;">Double</span></span><span style="color: #000000;"><span style="color: #000000;">) radius{</span></span><span style="color: #0000ff;"><span style="color: #0000ff;">return</span></span><span style="color: #000000;"><span style="color: #000000;">_radius;}</span></span><span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;"><span style="color: #008000;">getter and setter at the center</span></span>- (<span style="color: #0000ff;"><span style="color: #0000ff;">void</span></span>) Setpoint: (POINT2D *<span style="color: #000000;"><span style="color: #000000;">) Point{_point</span></span>=<span style="color: #000000;">point <span style="color: #000000;">;}</span></span>-(POINT2D *<span style="color: #000000;"><span style="color: #000000;">) point; { </span></span><span style="color: #0000ff;"><span style="color: #0000ff;">return</span></span><span style="color: #000000;"><span style="color: #000000;">_point;}</span></span><span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;"><span style="color: #008000;">Object Methods</span></span>-(BOOL) isinteractbetweencircle: (Circle *<span style="color: #000000;"><span style="color: #000000;">) other{</span></span><span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;"><span style="color: #008000;">look at the relationship between center distance and radius length</span></span><span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;"><span style="color: #008000;">Center Length</span></span>POINT2D *P1 =<span style="color: #000000;"><span style="color: #000000;">[self point]; POINT2D</span></span>*P2 =<span style="color: #000000;"><span style="color: #000000;">[other point]; </span></span><span style="color: #0000ff;"><span style="color: #0000ff;">Double</span></span>Distance = [p1 distancewithother:p2];<span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;"><span style="color: #008000;">5</span></span><span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;"><span style="color: #008000;">radius and</span></span>NSLog (<span style="color: #800000;"><span style="color: #800000;">@"</span></span><span style="color: #800000;"><span style="color: #800000;">Center Length%f</span></span><span style="color: #800000;"><span style="color: #800000;">"</span></span><span style="color: #000000;"><span style="color: #000000;">, distance); </span></span><span style="color: #0000ff;"><span style="color: #0000ff;">Double</span></span>Radiussum = [self radius] + [other radius];<span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;"><span style="color: #008000;">7</span></span>NSLog (<span style="color: #800000;"><span style="color: #800000;">@"</span></span><span style="color: #800000;"><span style="color: #800000;">radius length%f</span></span><span style="color: #800000;"><span style="color: #800000;">"</span></span><span style="color: #000000;"><span style="color: #000000;">, radiussum); </span></span><span style="color: #0000ff;"><span style="color: #0000ff;">return</span></span>Distance <<span style="color: #000000;"><span style="color: #000000;">radiussum;}</span></span><span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;"><span style="color: #008000;">determine if overlapping</span></span>+ (BOOL) isInteractBetweenCircle1: (circle *) C1 andCircle2: (circle *<span style="color: #000000;"><span style="color: #000000;">) c2{</span></span><span style="color: #0000ff;"><span style="color: #0000ff;">return</span></span><span style="color: #000000;"><span style="color: #000000;">[C1 isinteractbetweencircle:c2];} @end</span></span><span style="color: #0000ff;"><span style="color: #0000ff;">int</span></span><span style="color: #000000;"><span style="color: #000000;">main () {</span></span><span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;"><span style="color: #008000;">all objects have *</span></span> <span style="color: #008000;"><span style="color: #008000;">/*</span></span><span style="color: #008000;"><span style="color: #008000;">point2d *p1 = [point2d new]; [P1 setx:10 andy:15]; point2d *p2 = [point2d new]; [P2 setx:10 andy:12]; Double D1 = [p1 distancewithother:p2]; Double D1 = [point2d Distancewithother1:p1 andpoint2:p2]; NSLog (@ "%f", d1); </span></span><span style="color: #008000;"><span style="color: #008000;">*/</span></span> <span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;"><span style="color: #008000;">C1</span></span>Circle *C1 = [circle<span style="color: #0000ff;"><span style="color: #0000ff;">New</span></span><span style="color: #000000;"><span style="color: #000000;">]; [C1 setradius:</span></span><span style="color: #800080;"><span style="color: #800080;">5</span></span><span style="color: #000000;"><span style="color: #000000;">]; POINT2D</span></span>*P1 = [point2d<span style="color: #0000ff;"><span style="color: #0000ff;">New</span></span><span style="color: #000000;"><span style="color: #000000;">]; [P1 setX:</span></span><span style="color: #800080;"><span style="color: #800080;">Ten</span></span>AndY:<span style="color: #800080;"><span style="color: #800080;"></span> the</span><span style="color: #000000;"><span style="color: #000000;">]; [C1 setpoint:p1]; [[C1 point] setX:</span></span><span style="color: #800080;"><span style="color: #800080;"></span> the</span><span style="color: #000000;"><span style="color: #000000;">]; </span></span><span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;"><span style="color: #008000;">C1 5 (15,15)</span></span><span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;"><span style="color: #008000;">C2</span></span>Circle *C2 = [circle<span style="color: #0000ff;"><span style="color: #0000ff;">New</span></span><span style="color: #000000;"><span style="color: #000000;">]; [C2 setradius:</span></span><span style="color: #800080;"><span style="color: #800080;">2</span></span><span style="color: #000000;"><span style="color: #000000;">]; POINT2D</span></span>*P2 = [point2d<span style="color: #0000ff;"><span style="color: #0000ff;">New</span></span><span style="color: #000000;"><span style="color: #000000;">]; [P2 setX:</span></span><span style="color: #800080;"><span style="color: #800080;"></span> a</span>AndY:<span style="color: #800080;"><span style="color: #800080;"></span> +</span><span style="color: #000000;"><span style="color: #000000;">]; </span></span><span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;"><span style="color: #008000;">Set Center</span> point</span><span style="color: #000000;"><span style="color: #000000;">[C2 setpoint:p2]; </span></span><span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;"><span style="color: #008000;">C2 2 (12,19)</span></span>BOOL B1 =<span style="color: #000000;"><span style="color: #000000;">[C1 isinteractbetweencircle:c2]; NSLog (</span></span><span style="color: #800000;"><span style="color: #800000;">@"</span></span><span style="color: #800000;"><span style="color: #800000;">%d</span></span><span style="color: #800000;"><span style="color: #800000;">"</span></span><span style="color: #000000;"><span style="color: #000000;">, b1); </span></span><span style="color: #0000ff;"><span style="color: #0000ff;">if</span></span><span style="color: #000000;"><span style="color: #000000;">(b1) {NSLog (</span></span><span style="color: #800000;"><span style="color: #800000;">@"</span></span><span style="color: #800000;"><span style="color: #800000;">overlap</span></span><span style="color: #800000;"><span style="color: #800000;">"</span></span><span style="color: #000000;"><span style="color: #000000;">); }</span></span><span style="color: #0000ff;"><span style="color: #0000ff;">Else</span></span><span style="color: #000000;"><span style="color: #000000;">NSLog (</span></span><span style="color: #800000;"><span style="color: #800000;">@"</span></span><span style="color: #800000;"><span style="color: #800000;">do not overlap</span></span><span style="color: #800000;"><span style="color: #800000;">"</span></span><span style="color: #000000;"><span style="color: #000000;">); </span></span><span style="color: #0000ff;"><span style="color: #0000ff;">return</span></span> <span style="color: #800080;"><span style="color: #800080;">0</span></span><span style="color: #000000;"><span style="color: #000000;">;}</span></span></pre><p><p></p></p><p><p>Determine if two circles overlap in iOS</p></p></span>