博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
计算几何初步——共面判断(FZU1393)
阅读量:5222 次
发布时间:2019-06-14

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

先判断第三点是否与前2点共线,是的话,这4点肯定共面。

反之则以这3点确定一个平面方程,以此判断第四点是否在同一个面上。

View Code
1 #include
2 #include
3 #define EPS 1e-8 4 using namespace std; 5 6 struct point {
7 double x, y, z; 8 point (){} 9 point (double _x, double _y, double _z):x(_x),y(_y),z(_z){} 10 }data[4]; 11 12 bool equal_0(point &p) 13 {
14 if (p.x+p.y+p.z > EPS || p.x+p.y+p.z < -EPS)return false; 15 return true; 16 } 17 18 point cross(point &p, point &q) 19 {
20 point temp(p.y*q.z-p.z*q.y,p.z*q.x-p.x*q.z,p.x*q.y-p.y*q.x); 21 return temp; 22 } 23 24 bool on_line(point &p1, point &p2, point &temp) 25 {
26 point direction1(p2.x-p1.x,p2.y-p1.y,p2.z-p1.z); 27 point direction2(temp.x-p1.x,temp.y-p1.y,temp.z-p1.z); 28 point direction3 = cross(direction1,direction2); 29 if (equal_0(direction3)) {
30 return true; 31 } 32 return false; 33 } 34 35 bool is_interface(point &k, point &a, point &p) 36 {
37 if (k.x*(p.x - a.x) + k.y*(p.y - a.y) + k.z*(p.z - a.z) <= EPS && 38 k.x*(p.x - a.x) + k.y*(p.y - a.y) + k.z*(p.z - a.z) >= -EPS) 39 return true; 40 return false; 41 } 42 43 int main() 44 {
45 int T; 46 scanf("%d",&T); 47 while (T--) {
48 for (int i(0); i<4; ++i) {
49 scanf("%lf%lf%lf",&data[i].x,&data[i].y,&data[i].z); 50 } 51 if (on_line(data[0],data[1],data[2])) {
52 cout<<"Yes"<

转载于:https://www.cnblogs.com/devtang/archive/2012/01/16/2323996.html

你可能感兴趣的文章
charles解决相应乱码问题
查看>>
Unity中Button按钮的触发监听事件
查看>>
【Spark】SparkStreaming-流处理-规则动态更新-解决方案
查看>>
java报表工具FineReport常用函数的用法总结(文本和日期函数)
查看>>
python3下scrapy爬虫(第十四卷:scrapy+scrapy_redis+scrapyd打造分布式爬虫之执行)
查看>>
React Native知识11-Props(属性)与State(状态)
查看>>
thinkphp5.0 ajax分页
查看>>
python中的argsort函数
查看>>
ng-model的用法
查看>>
python 列表排序方法sort、sorted技巧篇
查看>>
关于unity3D的小操作
查看>>
java_IO_File_综合运用:建立一个指定扩展名的文件的列表
查看>>
归并排序(C#实现)
查看>>
无需编译、快速生成 Vue 风格的文档网站
查看>>
css grid栅格布局
查看>>
springboot集成mybatisplus
查看>>
[Linux]Linux下rsync服务器和客户端配置
查看>>
css-css权威指南学习笔记1
查看>>
将任何GitHub内的代码转为外部CDN网址
查看>>
Visual Studio 2017 智能提示英文怎么切换成中文?
查看>>