第1行:一个数T,表示输入的测试数量(1 <= T <= 1000)
第2 - 4T + 1行:每行4行表示一组数据,每行3个数,x, y, z, 表示该点的位置坐标(-1000 <= x, y, z <= 1000)。
输出共T行,如果共面输出"Yes",否则输出"No"。
1
1 2 0
2 3 0
4 0 0
0 0 0
Yes
将四个点换成三个向量,然后判断三阶行列式(谁知道是什么鬼)是否为0,为0表示三个向量共面。
粘一个百度上搜到的计算方法:
标准方法是在已给行列式的右边添加已给行列式的第一列、第二列。我们把行列式的左上角到右下角的对角线称为主对角线,把右上角到左下角的对角线称为次对角线。这时,三阶行列式的值等于主对角线的三个数的积与和主对角线平行的三个对角线上的数的积的和减去次对角线的三个数的积与和次对角线平行的对角线上三个数的积的和的差。
例如
a1 a2 a3
b1 b2 b3
c1 c2 c3
结果为 a1*b2*c3+b1*c2*a3+c1*a2*b3-a3*b2*c1-b3*c2*a1-c3*a2*b1(注意对角线就容易记住了)
这里一共是六项相加减,整理下可以这么记:
a1*(b2*c3-b3*c2) + a2*(b3*c1-b1*c3) + a3*(b1*c2-b2*c1)
此时可以记住为:
a1*a1的代数余子式+a2*a2的代数余子式+a3*+a3的代数余子式
某个数的代数余子式是指删去那个数所在的行和列后剩下的行列式。
行列式的每一项要求:不同行不同列的数字相乘
如选了a1则与其相乘的数只能在2,3行2,3列中找,(即在 b2 b3 中找)
c2 c3
而a1(b2·c3-b3·c2)-a2(b1·c3-b3·c1)+a3(b1·c2-b2·c1)是用了行列式展开运算:即行列式等于它每行的每一个数乘以它的代数余子式之和 某个数的代数余子式是指删去那个数所在的行和列后剩下的行列式。
#include<bits/stdc++.h>
using namespace std;
struct wzy{
double x,y,z;
}p[5];
int main()
{
int t;
double x1,y1,z1;
double x2,y2,z2;
double x3,y3,z3;
cin>>t;
while(t--)
{
for(int i=0;i<4;i++) cin>>p[i].x>>p[i].y>>p[i].z;
x1=p[1].x-p[0].x;y1=p[1].y-p[0].y;z1=p[1].z-p[0].z;
x2=p[1].x-p[2].x;y2=p[1].y-p[2].y;z2=p[1].z-p[2].z;
x3=p[1].x-p[3].x;y3=p[1].y-p[3].y;z3=p[1].z-p[3].z;
if(x1*y2*z3+y1*z2*x3+z1*x2*y3-z1*y2*x3-x1*y3*z2-y1*x2*z3==0) cout<<"Yes"<<endl;//三阶行列式为零,共面
else cout<<"No"<<endl;
}
return 0;
}
51Nod:1265 四点共面的更多相关文章
-
51Nod 1265 四点共面(计算几何)
1265 四点共面 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 给出三维空间上的四个点(点与点的位置均不相同),判断这4个点是否在同一个平面内(4点共线也算共面). ...
-
51nod 1265 四点共面【计算几何+线性代数】
1265 四点共面 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 收藏 关注 给出三维空间上的四个点(点与点的位置均不相同),判断这4个点是否在同一个平面内(4点共 ...
-
51nod 1265 四点共面——计算几何
题目链接:http://www.51nod.com/Challenge/Problem.html#!#problemId=1265 以其中某一点向其它三点连向量,若四点共面,这三个向量定义的平行六面体 ...
-
51nod1265 四点共面
题目链接:51nod 1265 四点共面 四个点构成的三个向量a,b,c共面的充要条件是存在不全为零的实数x,y,z满足x*a+y*b+z*c=0,然后想到线代了.. 其实就是三个向量的混合积为0:( ...
-
51Nod-1265 四点共面
51Nod 1265 : http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1265 1265 四点共面 基准时间限制:1 秒 ...
-
51nod1265四点共面
1265 四点共面 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 给出三维空间上的四个点(点与点的位置均不相同),判断这4个点是否在同一个平面内(4点共线也算共面).如 ...
-
(四点共面) 51nod1265 四点共面
1265 四点共面 1 秒 131,072 KB 0 分 基础题 给出三维空间上的四个点(点与点的位置均不相同),判断这4个点是否在同一个平面内(4点共线也算共面).如果共面,输出"Ye ...
-
51nod--1265 四点共面 (计算几何基础, 点积, 叉积)
题目: 1265 四点共面 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 收藏 关注 给出三维空间上的四个点(点与点的位置均不相同),判断这4个点是否在同一个平面内(4 ...
-
51nod1265判断四点共面
1265 四点共面 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 收藏 关注 给出三维空间上的四个点(点与点的位置均不相同),判断这4个点是否在同一个平面内(4点共 ...
随机推荐
-
mysql_fetch_array,mysql_fetch_row,mysql_fetch_assoc区别
array mysql_fetch_array ( result [, int result_type] ) 返回:根据从结果集取得的行生成的数组,如果没有更多行则返回 FALSE. int ...
-
公钥私钥和RSA算法
1, RSA算法原理(一) http://www.ruanyifeng.com/blog/2013/06/rsa_algorithm_part_one.html 2, RSA算法原理(二) http: ...
-
WPF学习之路(七)应用程序和窗口(续)
窗口的生命周期 WPF中一个Window类代表一个窗口 一个的窗口的生命周期也有好几个阶段: 1.构造器被调用 2.Window.Initialized事件被触发 3.Window.Activated ...
-
Redis 命令总结
Redis命令总结 连接操作相关的命令 quit:关闭连接(connection) auth:简单密码认证 持久化 save:将数据同步保存到磁盘 bgsave:将数据异步保存到磁盘 lastsa ...
-
Python学习笔记——进阶篇【第九周】———MYSQL操作
Mysql 增删改查操作 查看数据库 show databases; 创建数据库并允许中文插入 create database s12day9 charset utf8; 使用数据库 use s12d ...
-
IOS开发-ObjC-NSDictionary
OC中Foundation框架中有字典类,字典分不可变字典(NSDictionary)和可变字典(NSMutableDictionary),它们的使用如下: 不可变字典: //------------ ...
-
windows phone 8.1 开发:后台任务详解
原文出自:http://www.bcmeng.com/backtask/ 小梦今天给大家分享一下windows phone 8.1中的后台任务如何实现,许多应用都会用到后台任务,所以我们必须得掌握. ...
-
truncated、delete和drop的异同点
相同点 truncate和不带where子句的delete, 以及drop都会删除表内的数据. 不同点: 1.truncate和 delete只删除数据不删除表的结构(定义) drop语句将删除表的结 ...
-
WindowsPE权威指南 第二章 小工具 pedump代码的C语言实现
2016-11-16 16:29:07 主程序代码 pedump.c #include <windows.h> #include <Richedit.h> #include & ...
-
Sonar6.7.1配置修改备注
sonarqube-6.7.1\conf\sonar.properties的配置字段 sonar.jdbc.url=jdbc:mysql://localhost:3306/sonarqube?useU ...