java 面向物件_圓類
阿新 • • 發佈:2019-02-10
計算兩個圓的位置關係
Circle:類
package _02_第二章類與物件.C202_02_03_圓類; public class Circle { /** * 相離 */ public static final byte DISJOINT = 0; /** * 外切 */ public static final byte EXTERNAL_CUTTING = 1; /** * 相交 */ public static final byte INTERSECT = 2; /** * 內切 */ public static final byte INTERNAL_CUTTING = 3; /** * 內含 */ public static final byte CONTAIN = 4; private Point p;//圓心 private float r;//半徑 public void init(Point p,float r){ this.p = p; this.r = r; } public void init(float x,float y,float r){ //函式過載 this.p = new Point(); //避免空指標 沒有指向任何東西 所以先 宣告一個引用 p.init(x,y); this.r = r; } public float area(){ //不需要給引數 return (float) (Math.PI*r*r); } public float C(){ return (float) (2*Math.PI*r); } /** * 判斷兩個圓的位置關係 * @param c 另一個圓 * @return 位置關係 : 0-相離 / 1-外切 / 2-相交 / 3-內切 / 4-內含 */ public byte poistion(Circle c){ float d = this.p.distance(c.p); float d1 = this.r+c.r; float d2 = Math.abs(this.r-c.r); if (Math.abs(d-d1) < 1e-6){ return EXTERNAL_CUTTING; } if (Math.abs(d-d2) < 1e-6){ return INTERNAL_CUTTING; } if (d > d1){ return DISJOINT; } if (d > d2){ //能夠到這來 就已經排出了 大於d1的情況 讓程式碼更加簡潔 return INTERSECT; } return CONTAIN; } }
Point類:
package _02_第二章類與物件.C202_02_03_圓類; public class Point { private float x;//x是屬性 private float y; public void init (float x,float y){ //x是形參 函式內部有效 this.x = x; //如果寫成 x = x就錯了 ,需要加this 不然起不到改float x的作用 this.y = y; } /** * 計算兩點之間的距離 * @param p 輸入的座標值 * @return 帶回p點和 x,y點 之間的值 */ public float distance(Point p){ return (float) Math.sqrt((this.x-p.x)*(this.x-p.x)+(this.y-p.y)*(this.y-p.y)); } }
主函式 Text:
package _02_第二章類與物件.C202_02_03_圓類; public class Test { public static void main(String[] args) { Circle c1 = new Circle(); Circle c2 = new Circle(); Point p = new Point(); p.init(0,0); c1.init(p,3); c2.init(3,4,2); System.out.println(c1.C()); System.out.println(c1.area()); switch (c1.poistion(c2)){ case Circle.DISJOINT: System.out.println("相離");break; case Circle.EXTERNAL_CUTTING: System.out.println("外切");break; case Circle.INTERSECT: System.out.println("相交");break; case Circle.INTERNAL_CUTTING: System.out.println("內切");break; case Circle.CONTAIN: System.out.println("內含");break; } } }
結果:
18.849556
28.274334
外切