日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

sicily 1012. Stacking Cylinders

發(fā)布時間:2023/12/18 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 sicily 1012. Stacking Cylinders 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
//純計算題,三角形內(nèi),已知兩點(diǎn)坐標(biāo)A(x1,y1),B(x2,y2),求第三點(diǎn)的坐標(biāo)C(x3,y3),其中頂點(diǎn)A,B到C距離都為2
//由 (x3-x1)^2+(y3-y1)^2=4 和 (x3-x2)^2+(y3-y2)^2=4
//可得 2(x2-x1)*x3+2(y2-y1)*y3=x2^2-x1^2+y2^2-y1^2 (1)
//設(shè)A,B距離為L,則頂點(diǎn)C到直線AB的距離 H=2*sin<CAB=2*√(1-L^2/16)
//再應(yīng)用點(diǎn)( x0,y0)到直線ax+by+c=0 的距離公式 |ax0+by0+c|/√(a^2+b^2)
//可得 H=| 1/(x2-x1) *x3 - 1/(y2-y1) *y3 -x2/(x2-x1)+y2/(y2-y1) | / √(1/(x2-x1)^2+1/(y2-y1)^2) (2)
//聯(lián)立(1)(2),即可求解

#include
<iostream> //計算幾何
#include<cmath>
#include
<stdio.h>
#include
<algorithm>
using namespace std;
double x[4],y[4];
int cmp(const void *a,const void *b)
{
return ((double *)a)[0] > ((double *)b)[0] ?1:-1 ;
}
void cross(double o,double p,double q,double r)
{
x[
1]=o;y[1]=p;x[2]=q;y[2]=r;

if(y[1]==y[2])
{
x[
3]=(x[1]+x[2])/2.0;
y[
3]=y[1]+2*sqrt(1-pow(x[2]-x[1],2.0)/16.0);
return ;
}

double a[3],b[3],c[3],temp;
a[
1]=2*(x[2]-x[1]);b[1]=2*(y[2]-y[1]);c[1]=x[2]*x[2]-x[1]*x[1]+y[2]*y[2]-y[1]*y[1];
a[
2]=1.0/(x[2]-x[1]);b[2]=-1.0/(y[2]-y[1]);
temp
=2*sqrt(1.0-(pow(x[2]-x[1],2.0)+pow(y[2]-y[1],2.0))/16.0)*sqrt(1.0/pow((x[2]-x[1]),2.0)+1.0/pow((y[2]-y[1]),2.0));
c[
2]=temp+x[2]/(x[2]-x[1])-y[2]/(y[2]-y[1]);
x[
3]=(c[1]*b[2]-c[2]*b[1])/(a[1]*b[2]-a[2]*b[1]);y[3]=(a[2]*c[1]-a[1]*c[2])/(b[1]*a[2]-a[1]*b[2]);

if(y[3]<y[1]||y[3]<y[2]) //點(diǎn)(x0,y0)到直線ax+by+c=0 的距離公式 |ax0+by0+c| / √(a^2+b^2) ,其中有絕對值符號
{
c[
2]=-temp+x[2]/(x[2]-x[1])-y[2]/(y[2]-y[1]);
x[
3]=(c[1]*b[2]-c[2]*b[1])/(a[1]*b[2]-a[2]*b[1]);y[3]=(a[2]*c[1]-a[1]*c[2])/(b[1]*a[2]-a[1]*b[2]);
}
}
int main()
{
double arr[2][20][2];
int cs,s;
cin
>>cs;
for(int i=1;i<=cs;++i)
{
cin
>>s;
int id=0;
for(int j=1;j<=s;++j)
{
cin
>>arr[id][j][0];
arr[id][j][
1]=1.0;
}
qsort(arr[id]
+1,s,sizeof(arr[id][1]),cmp); //要先排序
while(s>1)
{
for(int j=1;j<s;++j)
{
cross(arr[id][j][
0],arr[id][j][1],arr[id][j+1][0],arr[id][j+1][1]);
arr[(id
+1)%2][j][0]=x[3];arr[(id+1)%2][j][1]=y[3]; //滾動數(shù)組
}
id
=(id+1)%2;
s
--;
}
printf(
"%d: %0.4lf %0.4lf\n",i,arr[id][1][0],arr[id][1][1]);
}
return 0;
}

轉(zhuǎn)載于:https://www.cnblogs.com/mjc467621163/archive/2011/07/04/2097654.html

總結(jié)

以上是生活随笔為你收集整理的sicily 1012. Stacking Cylinders的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。