湘南学院2-B

题目描述

In the x y xy xy-plane, there are three points A A A( x A x_A xA​, y A y_A yA​), B B B( x B x_B xB​, y B y_B yB​), and C C C( x C x_C xC​, y C y_C yC​) that are not collinear. Determine whether the triangle ABC is a right triangle.
题目描述也就是给了我们三个点的坐标,问我们,这个三角形是否为直角三角形

思路

对于已知三个点,去判断他为什么三角形,我们有多种方式去判断,最简单也就是利用余弦定理
在这里插入图片描述
我们已知这个公式的话也可以直接解决这个题目了,当然,我这里打算对这个公式进行展开,我们先画出这个三角形
在这里插入图片描述

根据图片中所描述,我们可以发现, c = a − b c = a - b c=ab,我们把该公式替换进余弦定理中,展开为
在这里插入图片描述最后,我们可以得到
在这里插入图片描述
那么此时,我们是不是就得知了这个 θ θ θ
因为 ∣ a ∣ ∗ ∣ b ∣ |a| * |b| ab是已知值,所以确定符号的也就是 a ⋅ b a·b ab了,那么结论也就是

  • a ⋅ b > 0 a·b>0 ab>0    方向基本相同,夹角在0°到90°之间
  • a ⋅ b = 0 a·b=0 ab=0    正交,相互垂直
  • a ⋅ b < 0 a·b<0 ab<0    方向基本相反,夹角在90°到180°之间

p s : ps: ps: 这里的这个乘法是点乘,不是叉乘,点乘的计算方式是如下:
假如 a a a b b b的值为:
在这里插入图片描述那么 a ⋅ b a·b ab也就是:
在这里插入图片描述

最终代码

此时,我们就得到了该答案的正确且快捷的写法:
求出三个向量,然后分别判断他们两两的点乘是否存在0即可,也可以拓展为判断三角形是否是锐角、钝角,这里就不做描述了,代码如下:

#include <iostream>
#include <algorithm>

void solve()
{
    int x1,y1,x2,y2,x3,y3;
    std::cin >> x1 >> y1 >> x2 >> y2 >> x3 >> y3;
    
    int a1 = x1 - x2,b1 = y1 - y2;
    int a2 = x1 - x3,b2 = y1 - y3;
    int a3 = x2 - x3,b3 = y2 - y3;
    
    if((a1*a2+b1*b2 == 0) || (a1*a3 + b1*b3 == 0) || (a2 * a3 + b2 * b3 == 0))  std::cout << "Yes";
    else std::cout << "No";
}

int main()
{
    int T = 1;//std::cin >> T;
    while(T--)  solve();
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值