还是直接看板子,
根据板子上面的注释学内容。

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;
const double eps = 1e-8;
int sgn(double x){if(fabs(x)<eps)return 0;if(x<0)return -1;else return 1;
}
struct point{double x,y,z;point(){};point(double _x,double _y,double _z){x=_x;y=_y;z=_z;}void input(){scanf("%lf%lf%lf",&x,&y,&z);}void output(){printf("%.2lf %.2lf %.2lf\n",x,y,z);}bool operator == (const point &b)const{return sgn(x-b.x)==0&&sgn(y-b.y)==0&&sgn(z-b.z)==0;}bool operator <(const point &b)const{return sgn(x-b.x)==0?(sgn(y-b.y)==0?sgn(z-b.z)<0:y<b.y):x<b.x;}double len(){return sqrt(x*x+y*y+z*z);}double len2(){return x*x+y*y+z*z;}double distance (const point &b)const{return sqrt((x-b.x)*(x-b.x)+(y-b.y)*(y-b.y)+(z-b.z)*(z-b.z));}point operator - (const point &b)const{return point (x-b.x,y-b.y,z-b.z);}point operator + (const point &b)const{return point (x+b.x,y+b.y,z+b.z);}point operator * (const double &b)const{return point (x*b,y*b,z*b);}point operator / (const double &b)const{return point (x/b,y/b,z/b);}double operator * (const point &b)const{return x*b.x+y*b.y+z*b.z;}point operator ^ (const point &b)const{return point (y*b.z-z*b.y,z*b.x-x*b.z,x*b.y-y*b.x);}double rad(point a,point b){point p = (*this);return acos(((a-p)*(b-p))/(a.distance(p)*b.distance(p)));}//变换长度point trunc(double r){double l=len();if(!sgn(l))return *this;r/=l;return point(x*r,y*r,z*r);}};
struct line{point s,e;line(){};line(point _s,point _e){s=_s,e=_e;}bool operator  == (const line v){return (s==v.s)&&(e==v.e);}void input(){s.input();e.input();}double length(){return s.distance(e);}//点到直线的距离double dist_point_to_line(point p){return ((e-s)^(p-s)).len()/s.distance(e);}double dist_point_to_seg(point p){if(sgn((p-s)*(e-s))<0||sgn((p-e)*(s-e))<0)return min(p.distance(s),p.distance(e));return dist_point_to_line(p);}//返回点 p 在直线上的投影point line_prog(point p){return s + ( ((e-s)*((e-s)*(p-s)))/((e-s).len2()) );}//p 绕此向量逆时针 arg 角度point ratate(point p,double ang){if(sgn(((s-p)^(e-p)).len()) == 0)return p;point f1 = (e-s)^(p-s);point f2 = (e-s)^(f1);double len = ((s-p)^(e-p)).len()/s.distance(e);f1 = f1.trunc(len);f2 = f2.trunc(len);point h = p+f2;point pp = h+f1;return h+((p-h)*cos(ang))+((pp-h)*sin(ang));}//点在直线上bool point_on_seg(point p){return sgn(((s-p)^(e-p)).len())==0 &&sgn((s-p)*(e-p))==0;}
};
struct plane{point a,b,c,o;//o表示的是法向量plane(){};point pvec(){return (b-a)^(c-a);}plane(point _a,point _b,point _c){a=_a;b=_b;c=_c;o= pvec();}//ax+by+cz+d=0;plane(double _a,double _b,double _c,double _d){o=point(_a,_b,_c);if(sgn(_a)!=0)a=point((-_d-_c-_b)/_a,1,1);else if(sgn(_b)!=0){a=point (1,(-_d-_c-_a)/_b,1);}else if(sgn(_c)!=0){a= point (1,1,(-_d-_a-_b)/_c);}}//点在平面上的判断bool pointonplane(point p){return sgn((p-a)*o) == 0;}//两平面夹角double angleplane(plane f){return acos(o*f.o)/(o.len()*f.o.len());}//平面和直线的交点,返回交点个数int cross_line(line u,point &p){double x = o*(u.e-a);double y = o*(u.s-a);double d = x-y;if(sgn(d)==0)return 0;p=((u.s*x)-(u.e*y))/d;return 1;}//点到平面的最近点(也就是投影)point point_to_plane(point p){line u=line(p,p+o);cross_line(u,p);return p;}//平面和平面的交线int cross_plane(plane f,line &u){point oo=o^f.o;point v = o^oo;double d = fabs(f.o*v);if(sgn(d)==0)return 0;point q= a+(v*(f.o*(f.a-a))/d);u=line(q,q+oo);return 1;}
};
int main()
{printf("板子\n");return 0;
}

计算几何(立体几何)基础篇相关推荐

  1. Python Qt GUI设计:信号与槽的使用方法(基础篇—7)

    目录 1.信号与槽的概念 2.信号与槽的基础函数 2.1.创建信号函数 2.2.连接信号函数 2.3.断开信号函数 2.4.发射信号函数 3.信号和槽的使用方法 3.1.内置信号与槽的使用 3.2.自 ...

  2. Python Qt GUI设计:窗口布局管理方法【强化】(基础篇—6)

    目录 1. 水平布局类(QHBoxLayout) 2.垂直布局类(QVBoxLayout) 3.网格布局类(QGridLayout) 3.1.单一的网络布局 3.2.跨越行.列的网络布局 4.表单布局 ...

  3. Python Qt GUI设计:窗口布局管理方法【基础】(基础篇—5)

    目录 1.布局管理器进行布局 2.容器控件进行布局 3.geometry属性:控件绝对布局 4.sizePolicy属性:微调优化控件布局 Qt Designer提供4种窗口布局方式,分别如下: Ve ...

  4. ES6 你可能不知道的事 – 基础篇

    ES6 你可能不知道的事 – 基础篇 转载 作者:淘宝前端团队(FED)- 化辰 链接:taobaofed.org/blog/2016/07/22/es6-basics/ 序 ES6,或许应该叫 ES ...

  5. python多线程并发_Python进阶记录之基础篇(二十四)

    回顾 在Python进阶记录之基础篇(二十三)中,我们介绍了进程的基本概念以及Python中多进程的基本使用方法.其中,需要重点掌握多进程的创建方法.进程池和进程间的通信.今天我们讲一下Python中 ...

  6. 基础篇9-python基本数据结构-列表

    基础篇9-python基本数据结构-列表 一.列表: 1.有序的集合 2.通过偏移来索引,从而读取数据 3.支持内嵌 a =[[1,2,3],[4,5,6]] 4.可变类型 a[0][1] = 7 二 ...

  7. Linq初级班 Linq To XML体验(基础篇)

    LINQ To XML体验(基础) 这两天开始学习LINQ to XML的知识,我会继续把自己的感想和示例发布给初学者们学习的,一样欢迎高手们多多指点,请勿使用过激语言,针锋相对,我是个初学者,自知还 ...

  8. php 爬虫_Scrapy 爬虫完整案例-基础篇

    1 Scrapy 爬虫完整案例-基础篇 1.1 Scrapy 爬虫案例一 Scrapy 爬虫案例:爬取腾讯网招聘信息 案例步骤: 第一步:创建项目. 在 dos下切换到目录 D:爬虫_scriptsc ...

  9. class括号里的object_Python入门 类class 基础篇

    记住一句话:类是模板,而实例则是根据类创建的对象. 我初学时对类的理解是从类的字面上,可以片面的认为它是一个种类,它是相似特征的抽像,也就是相似的东西,可以把相似特征的事务抽象成一个类.(事务可以是具 ...

最新文章

  1. BAPI_SALESORDER_CREATEFROMDAT2 条件 定价元素
  2. LinearLayout和RelativeLayout 区别
  3. mfc清除配置ini文件的数据_大数据环境搭建与配置——aptget源更新、CRT链接、文件服务器配置...
  4. LDAP第三天 MySQL+LDAP 安装
  5. Web应用程序中的Spring JDBC入门
  6. oracle 11gdata guard,Oracle 11g Data Guard配置
  7. 【Python学习】 caffe-master 之 mnist 详解
  8. oracle 命令分析
  9. 半波对称振子方向图_画好服装款式图的五个要点
  10. 谁能主宰服务器市场?Linux 之父和 Redis 之父有分歧了
  11. Android Studio如何隐藏系统的状态栏
  12. 微信linux 下载文件夹,把Windows下微信文件夹复制到Deepin-WeChat目录以更新微信
  13. 【无人机系统】四轴飞行器及其UAV飞控系统 - 桂林电子科技大学信息科技学院 电子工程系(一)
  14. [附源码]Java计算机毕业设计SSM房屋租赁管理系统设计
  15. 三泰串口卡linux驱动,工业多串口卡.pdf
  16. 面试常见问题及应答技巧
  17. Java迷宫小游戏,老程序员花一天时间完成,你可以吗?
  18. app推广假量怎么识别?
  19. 哈尔滨工业大学深圳计算机学院院长,哈工大计算机学院院长徐晓飞来访我院
  20. R语言笔记-数值型变量的描述统计

热门文章

  1. LeetCode.接雨水
  2. Python+PySide2:Label 插入动态GIF图片
  3. java 浮雕效果_android 图像处理(黑白,模糊,浮雕,圆角,镜像,底片,油画,灰白,加旧,哈哈镜,放大镜)...
  4. 无懈可击 Android 内部升级
  5. C语言 乘法运算
  6. 中国最大的系统软件开发外包公司排行榜有哪些
  7. ubuntu 安装opendr失败_安装软件失败求助
  8. 华为搜索引擎问世!互联网格局将改写?
  9. Loj #2585. 「APIO2018」新家
  10. 大数据培训:Spark性能调优与参数配置