2014-01-30 61 views
0

編寫一個讀取兩個點的Java程序,然後找到最小的圓和包含點的最小矩形。請注意,一個圓圈由其中心和半徑表示,而一個矩形由兩個對角點 - 左上角和右下角表示。例如,輸入p1 =(0,0)和p2 =(4,3),程序將打印出C =((2,1.5),2.5),R =((0,3),(4 ,0))。如果聲明不允許,但可以使用sqrt,pow,abs,max和min等內置方法。兩點,然後找到最小的圓和包含點的最小矩形

Scanner in = new Scanner (System.in); 
    double cx, cy, cyx,c; 
    double p1x,p1y,p2x,p2y; 
    System.out.print("Enter point 1, x ");//0 
    p1x=in.nextDouble(); 
    System.out.print("Enter point 1, y ");//0 
    p1y=in.nextDouble(); 
    System.out.print("Enter point 2, x ");//4 
    p2x=in.nextDouble(); 
    System.out.print("Enter point 2, y ");//3 
    p2y=in.nextDouble(); 

    cx= (p2x-p1x)/2;// (2,) 
    cy=(p2y-p1y)/2;// (,1.5) 
    cyx= (p2x-p2y)+cy;// ((,),2.5) 

    System.out.println((cx+","+cy)+","+cyx); 

只要半徑,我不確定。以及不知道代碼是否可以工作,或者我過於複雜的事情,或遠沒有。

+3

Tihs看起來很奇怪。嗯,它是 - http://stackoverflow.com/questions/21464333/two-points-find-smallest-circle-and-rectangle-points? – Coffee

+0

半徑將是這兩點之間距離的一半。 –

+1

@Adel - 好的! –

回答

1

包含兩個點的最小圓將沿着圓的圓周具有每個點,圓的中心位於這兩個點之間,這意味着圓的半徑是點之間距離的一半。

用最簡單的定義,我們可以使用((x2 + x1)/2, (y2 + y1)/2)作爲中心點,使用sqrt((x2 - x1)^2 + (y2 - y1)^2)/2作爲半徑。但是,如果我們使用java.awt.geom.Ellipse2D來表示圓,則需要包含圓的正方形的左上角以及圓的直徑。

直徑很容易:半徑的兩倍或sqrt((x2 - x1)^2 + (y2 - y1)^2)

要獲得的含正方形的左上角下,x減去半徑和中心點的y座標:

double diameter = Math.sqrt(Math.pow(x2 - x1, 2) + Math.pow(y2 - y1, 2)); 
Point2D.Double center = new Point2D.Double((x2 + x1)/2, (y2 + y1)/2); 
Point2D.Double tlCorner = new Point2D.Double(
    center.x - diameter/2, 
    center.y - diameter/2 
); 
Ellipse2D.Double circle = new Ellipse2D.Double(
    tlCorner.x, 
    tlCorner.y, 
    diameter, 
    diameter 
); 

含有兩個點的最小矩形使用這兩個點作爲相對角落。再次,用最簡單的定義,我們可以將兩個輸入點用作矩形的兩個角。但是,Java的矩形類期望左上角,寬度和高度,而不是兩點。

Rectangle2D.Double rect = new Rectangle2D.Double(
    Math.min(x1, x2), 
    Math.min(y1, y2), 
    Math.abs(x2 - x1), 
    Math.abs(y2 - y1) 
); 
相關問題