UVA 10609 數學 幾何 遞推

2021-06-23 04:55:17 字數 1327 閱讀 4294

用題目給的方法把乙個線段分形,最後輸出每個點的座標。

大體思路很簡單,就是找到兩個4等分點,然後遞迴處理每一段。直接用解析幾何的方法推導會比較繁雜,這裡使用兩個公式。用定比分點公式求出2個4等分點,然後就是已知兩點,求等邊三角形的另一點。平移座標系,用旋轉矩陣把乙個點轉60度(控制旋轉方向,這樣另乙個點就有唯一解),再把座標系平移回去就能求出新點的座標。

#include #include #include #include #define eps 1e-8

using namespace std;

const double pi=acos(-1.0);

int sgn(double x)

struct node

};double t;

vectorans;

void solve(double x1,double y1,double x2,double y2,bool flag)

tmp.x=x2;tmp.y=y2;ans.push_back(tmp);

double x3,y3,x4,y4,k,x,y,nx,ny,len;

k=1.0/3;

x3=(x1+k*x2)/(k+1);

y3=(y1+k*y2)/(k+1);

k=3;

x4=(x1+k*x2)/(k+1);

y4=(y1+k*y2)/(k+1);

len=sqrt((x3-x4)*(x3-x4)+(y3-y4)*(y3-y4));

if(sgn(len-t)<0)

return;

nx=x4-x3;ny=y4-y3;

x=cos(pi*5/3)*nx-sin(pi*5/3)*ny;

y=sin(pi*5/3)*nx+cos(pi*5/3)*ny;

x+=x3;y+=y3;

solve(x3,y3,x,y,1);

solve(x,y,x4,y4,0);

return;

}int main()

{ double x1,x2,y1,y2;int cot=1;

while(scanf("%lf%lf%lf%lf%lf",&x1,&y1,&x2,&y2,&t)!=eof)

{ if(sgn(t-1)<0)

return 0;

ans.clear();

solve(x2,y2,x1,y1,1);

sort(ans.begin(),ans.end());

printf("case %d:\n",cot++);

int n=ans.size();

printf("%d\n",n);

for(int i=0;i

UVA 1468 Restaurant 計算幾何

題目大意 給你n個點和乙個m m的座標紙 座標範圍0 m 1 n個點中前兩個為a和b,要求給出座標紙上滿足以下性質的點的數目 某乙個點滿足條件當且僅當對任意乙個給定點c,它對a曼哈頓距離小於c對a曼哈頓距離 或 它對b曼哈頓距離小於c對b曼哈頓距離。思路 顯然符合條件的點都在ab之間 因為如果在ab...

生活中的數學 買幾送幾

與打折問題常常同時出現的還有 買幾送幾 的問題,每每遇到 買幾送幾 的問題,總會有十幾個學生出錯。例如 開學初,學校打算買630枝鋼筆發給學生,這種鋼筆的統一價是每枝6元。現在有兩家文具店對這種鋼筆搞 活動,紅葉文具店打八五折,文峰文具店 買五送一 請你做一回 小參謀 算一算到哪家文具店購買比較合算...

Uva 10025 數學,推理

2014 06 07 22 22 40 題意 思路 1 2 3 n k 找出滿足條件的最小n.令s n 1 2 3 n.其中一項為x.那麼s n 1 2 3 x n.這樣結果可能大於等於 k 等於最好,即一次算出。所以我們把 x 改成 x,此時得到新的關係 s n 1 2 x n.s n s n 2...