2017.10.8 球形空间产生器sphere 思考记录

来源:互联网 发布:csgo mac版 编辑:程序博客网 时间:2024/06/15 06:17

圆心上的点到各点之间的距离相等,所以根据距离公式  sqrt (  (x-x1)^2  +(y-y1)^2 + (z-z1)^2)  可以由相邻两个式子列等式拆平方得到一元一次方程

然后消元求方程的解就行了。。

一开始看的黄学长的板子。。但感觉十分别扭,,于是自己写了一个。。但发现好像长得差不多。。


码:

#include<iostream>#include<cstdio>#define eps 1e-10#include<cmath>using namespace std;double a[15][15],d[15][15],lin,t;int i,j,k,n;void gauss(){int i,j,k,o=1;for(i=1;i<=n;i++){for(j=o;j<=n;j++)if(fabs(a[i][j])>eps)break;if(j==n+1)continue;if(j!=o)for(k=1;k<=n;k++)swap(a[k][j],a[k][o]);t=a[i][o];for(j=1;j<=n+1;j++)a[i][j]/=t;for(j=1;j<=n;j++)if(j!=i){t=a[j][o];for(k=1;k<=n+1;k++)a[j][k]-=t*a[i][k];}o++;}}int main(){scanf("%d",&n);for(i=1;i<=n;i++)scanf("%lf",&d[0][i]);for(i=1;i<=n;i++){lin=0;for(j=1;j<=n;j++){scanf("%lf",&d[i][j]);lin+=(d[i][j]*d[i][j]-d[i-1][j]*d[i-1][j]);a[i][j]=2*(d[i-1][j]-d[i][j]);    }    a[i][n+1]=lin;}gauss();for(i=1;i<=n;i++){printf("%.3lf",-a[i][n+1]);if(i!=n)printf(" ");}}