Points on Cycle (hdu1700,几何)
Points on CycleTime Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 1303 Accepted Submission(s): 459 Problem Description There is a cycle with its center on the origin. Now give you a point on the cycle, you are to find out the other two points on it, to maximize the sum of the distance between each other you may assume that the radius of the cycle will not exceed 1000. Input 
There are T test cases, in each case there are 2 decimal number representing the coordinate of the given point. 
Output 
For each testcase you are supposed to output the coordinates of both of the unknow points by 3 decimal places of precision  
Alway output the lower one first(with a smaller Y-coordinate value), if they have the same Y value output the one with a smaller X. NOTE 
when output, if the absolute difference between the coordinate values X1 and X2 is smaller than 0.0005, we assume they are equal. Sample Input 
2 
1.500 2.000 
563.585 1.251 
Sample Output 
0.982 -2.299 -2.482 0.299 
-280.709 -488.704 -282.876 487.453 
 | 
题意:(摘自网络)一个以原点为中心的圆,告诉你圆上的一个点,求与另外的两个点组成的三角形的周长最长的两点作标。
根据几何知识,知道圆内等边三角形的周长最长。所以题目转化为求已知一个点的圆内接等边三角形的另两点作标。
思路:设P(x,y),一个方程是x*x+y*y=r*r;另一个方程是根据向量知识,向量的夹角公式得到方程。
因为圆心角夹角为120度,已知一个向量(即一个点作标),所以夹角公式:COS(2PI/3)=a*b/|a|*|b|;(a,b为向量);
已知角和a向量,就可求b向量b(x,y).由方程组可求得(x,y);最后得到的是一元二次方程组,可得到两个解,即为两个点的作标。
下面是我自己的所作的详解:
                
 
ps:http://acm.hdu.edu.cn/showproblem.php?pid=1700
#include<stdio.h>
#include<math.h>
int main()
{
double x1,x2,x3,y1,y2,y3,a,b,c,r;
int T;
scanf("%d",&T);
while(T--)
{
scanf("%lf%lf",&x1,&y1);
r=sqrt(x1*x1+y1*y1);
a=;
b=y1;
c=r*r/-x1*x1;
y2=(-b-sqrt(b*b-*a*c))/(*a);
y3=(-b+sqrt(b*b-*a*c))/(*a);
if(fabs(x1-)<1e-)//注意这里不能是x1==0
{
x2=-sqrt(r*r-y2*y2);
x3=sqrt(r*r-y3*y3);
}
else
{
x2=(-r*r/-y1*y2)/x1;
x3=(-r*r/-y1*y3)/x1;
}
printf("%.3lf %.3lf %.3lf %.3lf\n",x2,y2,x3,y3); }
return ;
}
我自己错了好几次的,,,,囧rz 写的这么认真,这么详细了,真的很辛苦,
代码如下:
Points on Cycle (hdu1700,几何)的更多相关文章
- hdu 1700 Points on Cycle 水几何
		
已知圆心(0,0)圆周上的一点,求圆周上另外两点使得三点构成等边三角形. 懒得推公式,直接用模板2圆(r1=dist,r2=sqrt(3)*dist)相交水过 #include<cstdio&g ...
 - HDU 1700 Points on Cycle (几何 向量旋转)
		
http://acm.hdu.edu.cn/showproblem.php?pid=1700 题目大意: 二维平面,一个圆的圆心在原点上.给定圆上的一点A,求另外两点B,C,B.C在圆上,并且三角形A ...
 - HDU-1700         Points on Cycle
		
这题的俩种方法都是看别人的代码,方法可以学习学习,要多看看.. 几何题用到向量.. Points on Cycle Time Limit: 1000/1000 MS (Java/Others) ...
 - 暑假集训(2)第九弹 ----- Points on Cycle(hdu1700)
		
Points on Cycle Time Limit:1000MS Memory Limit:32768 ...
 - hdu1700 Points on Cycle
		
地址:http://acm.split.hdu.edu.cn/showproblem.php?pid=1700 题目: Points on Cycle Time Limit: 1000/1000 MS ...
 - hdu 1700 Points on Cycle(坐标旋转)
		
http://acm.hdu.edu.cn/showproblem.php?pid=1700 Points on Cycle Time Limit: 1000/1000 MS (Java/Others ...
 - L - Points on Cycle(旋转公式)
		
L - Points on Cycle Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u ...
 - HDU1700:Points on Cycle
		
Problem Description There is a cycle with its center on the origin. Now give you a point on the cycl ...
 - hdu1700 Points on Cycle (数学)
		
Problem Description There is a cycle with its center on the origin. Now give you a point on the cycl ...
 
随机推荐
- [Objective-C语言教程]字符串(16)
			
Objective-C编程语言中的字符串使用NSString表示,其子类NSMutableString提供了几种创建字符串对象的方法. 创建字符串对象的最简单方法是使用Objective-C的标识符: ...
 - Linux上安装java JDK
			
yum方式 1.查看yum中的各个版本 yum -y list java* 2.选择一个版本安装(如1.7) yum -y install java-1.7.0-openjdk* 3.安装完成后可查看 ...
 - Python FTP文件传输
			
FTP Server import socket import struct from concurrent.futures import ThreadPoolExecutor import json ...
 - [Umbraco] DocumentType设计指南
			
1. 命名规则 1.1. 文档类型(DocumentType)命名规则 图 1. Document Type命名示例 名称(Name) 采用帕斯卡命名法 如:TextPage 别名(Alias) ...
 - odoo开发笔记-tree列表视图拖拽排序
			
odoo列表tree视图 拖拽排序 实现效果: 实现方式: 模型中定义字段: class CusYourModel(models.Model): """ 你的模型 &qu ...
 - Oracle修改指定表空间为自动扩展
			
1.数据文件自动扩展的好处 1)不会出现因为没有剩余空间可以利用到数据无法写入 2)尽量减少人为的维护 3)可以用于重要级别不是很大的数据库中,如测试数据库等 2.数据文件自动扩展的弊端 1)如果任其 ...
 - [转]网页实时聊天之js和jQuery实现ajax长轮询 PHP
			
网页实时聊天之js和jQuery实现ajax长轮询 众所周知,HTTP协议是无状态的,所以一次的请求都是一个单独的事件,和前后都没有联系.所以我们在解决网页实时聊天时就遇到一个问题,如何保证与服务器的 ...
 - Linux 启动过程详解
			
目录 1. Linux启动过程 2. 启动过程概述 3. 引导加载阶段 4. 内核阶段 4.1 内核加载阶段 4.2 内核启动阶段 5. 早期的用户空间 6. 初始化过程 6.1 SysV init ...
 - 详解C#特性和反射(三)
			
类型信息(Type Information)用来表示类型声明的信息,通过抽象基类System.Type的实例存储这些信息,当使用反射时,CLR获取指定类型的Type对象,通过这个对象即可访问该类型的任 ...
 - java5新特性-加强for循环
			
本文目标是加强for循环和普通for循环的比较.阅读本文大概3-5分钟 刚开始学习编程语言的时候接触了三种循环方式 1. for 常用 2. while 较常用 3 do ... while 不常用 ...