计算几何(更新中)

#include <bits/stdc++.h>
using namespace std;
const double pi = acos(-1.0);
const double eps = 1e-10;
typedef struct P
{
    double x, y;
    P(double x=0, double y=0):x(x), y(y){}
}V; // V means vector and P means point.

V operator + (V A, V B) {return V(A.x + B.x, A.y + B.y); }
V operator - (P A, P B) {return P(A.x - B.x, A.y - B.y); }
V operator * (V A, double t) {return V(A.x * t, A.y * t); }
V operator / (V A, double t) {return P(A.x / t, A.y / t); }

bool operator < (const P &A, P &B){return A.x < B.x || (A.x == B.x && A.y < B.y);}

int dcmp(double x)//三态函数
{
    if(fabs(x) < eps) return 0;
    else return x < 0 ? -1 : 1;
}

bool operator == (const P &A, const P &B)
{
    return dcmp(A.x - B.x) == 0 && dcmp(A.y - B.y) == 0;
}

double Dot(V A, V B) {return A.x * B.x + A.y * B.y; }//点积
double Length(V A) {return sqrt(Dot(A, A)); }
double Angle(V A, V B) {return acos(Dot(A, B) / Length(A) / Length(B)); }
double Cross(V A, V B) {return A.x * B.y - B.x * A.y; }
double Area(P A, P B, P C) {return Cross(B - A, C - A); }//twice of triangle area
V Rotate(V A, double rad) //rad is rotate angle
{
   return V(A.x * cos(rad) - A.y * sin(rad), A.x * sin(rad) + A.y * cos(rad));
}
P LineIntersection(P p, V v, P Q, V w)
{
    V u = p - Q;
    double t = Cross(w, u) / Cross(v, w);
    return p + v * t;
}

int main()
{
    P p1(0, 1), p2(1, 0), p3(1, 1);
//    cout<<Area2(p1, p2, p3)<<endl;
//    printf("%lf\n", Area2(p1, p2, p3));
//    cout<<Angle(p1, p2)<<endl;
//    cout<<pi / 2<<endl;
//    double a = 1;
//    printf("%.20lf\n", 2 * Angle(p1, p2));
//    printf("%.20lf\n", pi / 2);
    p2 = Rotate(p1, pi);
    printf("%.5lf + %.5lf\n", p2.x, p2.y);
    cout<<p2.x<<" "<<p2.y<<endl;
    cout<<sin(pi / 2)<<endl;
    cout<<cos(pi / 2)<<endl;
    cout<<cos(3.14 / 2)<<endl;
    return 0;
}

时间: 2024-11-08 10:25:40

计算几何(更新中)的相关文章

linux学习资料持续更新中

一.LINUX基础教程 1.老男孩系列免费视频: 1) linux高薪入门实战视频教程(第二部)老男孩linux教程 http://edu.51cto.com/course/course_id-1035-page-1.html 2) 跟着老男孩从0开始一步步实战深入学习linux运维(三) http://edu.51cto.com/lesson/id-11909.html linux学习资料持续更新中,布布扣,bubuko.com

Hello World!的各种编程语言程序(持续更新中……)

对于很多学习编程语言新手们,可能接触到的第一个程序就是"Hello World"的输出程序,笔者想在此篇简短的博文中介绍关于各种编程语言的"Hello World"输出程序. 至今,笔者仅仅接触过C++和Python两种编程语言,而且都仅仅是新手,所以此次只能写C++和Python两种语言的"Hello World"输出程序,但此篇博文会随着笔者学习的编程语言种类的增多而不断完善. 1. C++语言 #include<iostream>

linux网络编程学习笔记之二 -----错误异常处理和各种碎碎(更新中)

errno 在unix系统中对大部分系统调用非正常返回时,通常返回值为-1,并设置全局变量errno(errno.h),如socket(), bind(), accept(), listen().erron存放一个正整数来保存上次出错的错误值. 对线程而言,每个线程都有专用的errno变量,不必考虑同步问题. strerror converts to English (Note: use strerror_r for thread safety) perror is simplified str

shell脚本练习题(更新中...)

练习题(这里贴的是自己写的代码, 网上给的题目代码我会附加在最下面) 1. 编写shell脚本,计算1-100的和: 1 #!/bin/bash 2 #caculate the sum of numbers from 1 to 100 3 4 sum=0 5 for i in `seq 1 100`; do 6 sum=$[$sum+$i] 7 done 8 echo $sum 2. 编写shell脚本,要求输入一个数字,然后计算出从1到输入数字的和,要求,如果输入的数字小于1,则重新输入,直到

ArcGIS 网络分析[1] 介绍与博文目录【更新中】

网络分析是个热点,理论上是属于计算机图形学和数据结构的,GIS以此为基础做出应用. 以下列举本人在学习中遇到的网络分析问题与经验总结. 平台:Windows 10操作系统,ArcGIS for Desktop 10.2或更高版本 用到的软件和SDK:VisualStudio 2012或更高版本.ArcGIS Objects 10.2或更高版本.Microsoft.NET Framework 3.5或更高版本 [网络分析介绍] [博文目录] 1. ArcGIS 网络分析[2] 利用自定义基础数据创

ASP.NET SignalR 与 LayIM2.0 配合轻松实现Web聊天室 实战系列(不断更新中)

项目简介 利用ASP.NET SignalR技术与Layim前端im框架实现的一个简单的web聊天室,包括单聊,群聊,加好友,加群,好友搜索,管理,群组管理,好友权限设置等功能.涉及技术: ElasticSearch 搜索,支持各种条件搜索,效率高,速度快,稳准狠. Redis缓存,统计在线好友,登录token等 RabbitMQ消息队列,发送消息通过队列降低数据库访问压力,或者延迟执行任务. ASP.NET MVC,UI架构. 以及普通的三层架构等.CRUD 当然其中的这些技术也是纯粹为了使用

linux历史——正在更新中

LINUX HISTORY write by Booboo Wei [email protected] 摘要:从长期的教学经验来看,初学Linux的宝宝们,有很多人对计算机的发展,Linux的历史不清楚,甚至很多是没有计算机硬件.网络等概念的.为了让宝宝们有一个好的基础,决定将一些重要的历史整合成文档,在教学中能对宝宝们有所帮助.文章主要从硬件发展简介,重点介绍IBM.AT&T.DEC等公司的产品,记录了一些重要概念:X86架构.世界第一台个人PC--Altair 8800.IBM5150:到操

我觉得有意思的JavaScript题目(01-05更新中)

对于以下js题目均来至于网络中.有的来至于文章之中,有的也许来至于问答题型中. 如果你有更好的问题解释,请留言交流! 1.相关问题描述:到底该怎么去理解闭包? 代码片段A: !function(){ var num=1; var exp={}; functionadd(num){ return num++; } exp.getAddNum=function(){ return add(num); } window.a=exp; }() console.log(a.getAddNum()); //

阿里笔试题(2015)持续更新中

第一次做阿里笔试题,除了ACM题之外从来没有做过校招网络题呀,完全是裸考,总体感觉吧,对于我来说,感觉时间不够用,不是题不会,感觉时间紧,大脑很混乱,总结这一次的笔试题 废话不多说,直接上题和答案 平均每个人逗留时间为20分钟,那么开场前20分钟一共来了400人,且有20个人逗留时间已经到,但他们不一定出去,注意是平均时间,所有博物馆最少应该容纳500人 双向循环列表,从任何一个元素开始可以遍历全部元素 先和后面的元素相连 s->next=p->next; p->next->pre

SQL Server 记录(更新中...)

sys.databases 显示所有数据库信息 sys.tables 显示当前数据库所有的表的信息 Go 向 SQL Server 实用工具发出一批 Transact-SQL 语句已结束的信号,Go本身不是T-SQL语句 sq_addrole 等等 SQL Server 系统存储过程以字符 sp_ 开头. EXEC或EXECUTE 执行 Transact-SQL 批处理中的命令字符串.字符串或执行下列模块之一:系统存储过程.用户定义存储过程.CLR 存储过程.标量值用户定义函数或扩展存储过程.