博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HDU 5017 Ellipsoid (计算几何,模拟退火)
阅读量:5019 次
发布时间:2019-06-12

本文共 1725 字,大约阅读时间需要 5 分钟。

Ellipsoid

Problem Description
Given a 3-dimension ellipsoid(椭球面)
your task is to find the minimal distance between the original point (0,0,0) and points on the ellipsoid. The distance between two points (x
1,y
1,z
1) and (x
2,y
2,z
2) is defined as 
 

Input
There are multiple test cases. Please process till EOF.
For each testcase, one line contains 6 real number a,b,c(0 < a,b,c,< 1),d,e,f
(0 ≤ d,e,f < 1), as described above. 
It is guaranteed that the input data forms a ellipsoid. All numbers are fit in double.
 

Output
For each test contains one line. Describes the minimal distance. Answer will be considered as correct if their absolute error is less than 10
-5.
 

Sample Input
 
1 0.04 0.01 0 0 0
 

Sample Output
 
1.0000000
 

Source
 

Recommend
hujie
 

题目大意:

             求一个椭球面上的一个点到原点的最短距离。

解题思路:

           模拟退火,不多解释了。

解题代码:

#include 
#include
#include
using namespace std;const double eps=1e-8;const double INF=1e100;const int offx[]={1,0,-1,0,1,-1,-1,1};const int offy[]={0,1,0,-1,1,1,-1,-1};double a,b,c,d,e,f;double getAns(double x,double y){ double A=c,B=d*y+e*x,C=a*x*x+b*y*y+f*x*y-1.0; double delta=B*B-4*A*C; if(delta<0) return INF+10; delta=sqrt(delta); double z1=(-B+delta)/(2*A),z2=(-B-delta)/(2*A); return min( sqrt(x*x+y*y+z1*z1) , sqrt(x*x+y*y+z2*z2) );}double tosolve(double sx,double sy){ double x=sx,y=sy,ans=getAns(sx,sy),step=1e6; while(step>eps){ double sx=x,sy=y; bool flag=false; for(int i=0;i<8;i++){ double dx=x+offx[i]*step,dy=y+offy[i]*step; double tmp=getAns(dx,dy); if(tmp>=INF) continue; if(tmp

版权声明:欢迎关注我的博客,本文为博主toyking原创文章,未经博主允许不得转载。

转载于:https://www.cnblogs.com/toyking/p/4950987.html

你可能感兴趣的文章
IOS开发之Bug--使用KVC的易错情况
查看>>
python list和tuple
查看>>
基础薄弱的反思
查看>>
ORACLE增删改查以及case when的基本用法
查看>>
[转]oracle10客户端PL/SQL Developer如何连接远程服务器上的oracle数据库
查看>>
HTML5 表单元素和属性
查看>>
SDUTOJ 2498 数据结构实验之图论十一:AOE网上的关键路径
查看>>
使用SpringSocial开发QQ登录
查看>>
好玩的游戏
查看>>
2.6. Statistical Models, Supervised Learning and Function Approximation
查看>>
代码说明call和apply方法的区别 (咱们这方面讲解的少,这样的题有变式,需要举例讲解一下)...
查看>>
T-SQL 类型转换
查看>>
在eclipse中设计BPMN 2.0工作流定义的根本步骤
查看>>
Json对象与Json字符串互转(4种转换方式)
查看>>
PAT甲级1002 链表实现方法
查看>>
查看Linux信息
查看>>
Python中sys模块sys.argv取值并判断
查看>>
【详记MySql问题大全集】四、设置MySql大小写敏感(踩坑血泪史)
查看>>
并查集
查看>>
ubuntu 11.04下android开发环境的搭建!
查看>>