栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

算法训练 坐标检测(25 pts)c++实现

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

算法训练 坐标检测(25 pts)c++实现

坐标检测(25 pts)
  • 问题描述

判断一个点是否在三角形内。

  • 输入

  • 输出

对于每一个询问的点,如果在三角形内输出一行Yes,不在三角形内输出一行No,共 qq 行。

  • 输入样例

0.0 0.0
1.0 0.0
0.0 1.0
10
0.2 0.2
1.0 1.0
0.65 0.35
1.0 0.0
0.64 0.35
0.64 0.36
0.63 0.37
0.62 0.38
0.61 0.39
0.60 0.40

  • 输出样例

Yes
No
No
No
Yes
No
No
No
No
No

问题提示


问题分析
**根据第一个和第二个提示可以判断出 如果对于三个方向 如三角形OAB 的有向面积和三角形OAC的y有向面积同号 则点C点B在直线的同侧 同理ABO 与 ABC 同号 BAO 与 BAC 同号 就可以确定C点在三角OAB内或者OAB上 一个条件不满足就不成立 **

#include
using namespace std;
int cmp(double a1,double a2,double b1,double b2){//判断有向面积的符号
	return ((a1 * b2) - (a2 * b1) ) >= 0 ? 1 : 0;
}
int main(){
	double a1,a2,a3,b1,b2,b3;
	scanf("%lf%lf",&a1,&b1);
	scanf("%lf%lf",&a2,&b2);
	scanf("%lf%lf",&a3,&b3);
	int n;
	cin>>n;
	for(int i = 0;i < n;i++){
		double a,b;
		scanf("%lf%lf",&a,&b);//后面的相减是为了将首点移动到原点
		if(cmp(a2 - a1,a3 - a1,b2 - b1,b3 - b1) == cmp(a2 - a1,a - a1,b2 - b1,b - b1)
		&&cmp(a3 - a2,a1 - a2,b3 - b2,b1 - b2) == cmp(a3 - a2,a - a2,b3 - b2,b - b2)
		&&cmp(a1 - a3,a2 - a3,b1 - b3,b2 - b3) == cmp(a1 - a3,a - a3,b1 - b3,b - b3)
		){
			cout<<"Yes"<
			cout<<"No"<
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/832344.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号