這題出2了,下次注意點。
時間卡緊了導致一些不太好的最小包圍圓模板過不了。
精度上要求有點高,可能導致了一些wa。
有的隊方法完全正確,由於出題的經驗不足,可惜了。
直接把標程貼出來吧。
題意:兩個點集的最小包圍圓, 隨機增量的時候,改一下模板就行了。
/*
*最小包圍圓隨機增量o(n)變形
* by tju_accry
**real 0m0.957s
*user 0m0.944s
*sys 0m0.012s
*/#include #include #include #include using namespace std;
#define sqr(a) ((a)*(a))
#define trarea(p) fabs ((vdet(p[0],p[1],p[2])/2.0))
double const eps = 1e-12;
int const maxn = 20011;
struct point;
struct circle;
inline double vdet(point op,point p1,point p2)
inline double dis(point a,point b)
inline point get_out_circle(point p)
inline double get_out_r(point p)
point must_on[3],p[maxn];
circle mc;
inline void get_circle(int tm)break;
case 3:break;
}}inline void min_circle(int t,int ton)
*//*本題*/
if(p[i].flag == 1)
}else }}}
int main()
for(int i = n; i < m + n; ++i)
n = n + m;
random_shuffle(p,p+n); //隨機化序列元素
min_circle(n,0);
printf("%.3lf %.3lf\n%.3lf\n",mc.c.x,mc.c.y,sqrt(mc.r));
} return 0;
}
最小包圍矩形
題目內容 給定一組二維座標,表示直角座標系內的乙個多邊形的連續的頂點的座標序列。計算能包圍這個多邊形的平行於座標軸的最小矩形,輸出它的左下角和右上角的座標。輸入格式 第一行是乙個正整數n表示頂點的數量,第二行是n組整數,依次表示每個頂點座標的x和y值。輸出格式 四個整數,依次表示所計算的矩形的左下角...
最小包圍凸包
最近看了最小凸包繪製,官方 沒看,常見的有graham s scan演算法 其實原理比較簡單,先將點集排序,之後根據左轉進行棧掃瞄。1.點集排序 一般取x座標最小的,並且盡量y大的,靠左下角的點作為起始點。然後連線起始點p0與其他點,計算連線與豎直向下方向的夾角,按照大小順序排列。s p1,p2,p...
matlab練習程式(最小包圍矩形)
又是計算幾何,我感覺最近對計算幾何上癮了。當然,工作上也會用一些,不過工作上一般直接呼叫boost的geometry庫。上次寫過最小包圍圓,這次是最小包圍矩形,要比最小包圍圓複雜些。最小包圍矩形可不一定是個直立的矩形,也可能像下圖一樣是傾斜的。求法如下 1.求多邊形凸包,這裡凸包直接呼叫系統函式了,...