2023-07-19 平面坐标下判断三角形以及输出周长和面积

news2024/11/26 16:43:38

平面坐标下判断三角形以及输出周长和面积

  • 前言
  • 一. 基本知识
  • 总结


前言

平面坐标下判断三角形以及输出周长和面积, 用线性代数的简单知识.


一. 基本知识

在平面坐标, 三个点就是三个向量, 可以通过两个向量同时减去第三个向量, 形成一个顶点在原点的三角形.

三角型
我们发现, 只有一种情况三角形不能成立, 就是从原点出发的两个向量在一条直线上
向量方向一致或相反
我们可以简单的用向量叉乘判断三角型是否成立, 同时, 向量叉乘的结果是向量形成的平行四边形面积
向量叉乘
平行四边形面积的一半就是三角形面积

而三角型的周长, 可以根据勾股定理得出三条边的长度, 相加得出.

以下是代码:

#include <math.h>
#include <stdio.h>
 
// 定义向量结构体
typedef struct
{
    double x;
    double y;
} Vector;
 
// 计算向量的差
Vector sub(Vector vecA, Vector vecB)
{
    return (Vector){vecA.x - vecB.x, vecA.y - vecB.y};
}
 
// 计算向量的叉积
double cross(Vector vecA, Vector vecB)
{
    return vecA.x * vecB.y - vecA.y * vecB.x;
}
 
// 计算两点之间的距离
double distance(Vector pointA, Vector pointB)
{
    Vector subAB = sub(pointA, pointB);
    return sqrt(subAB.x * subAB.x + subAB.y * subAB.y);
}
 
// 计算三角形的周长
double triPer(Vector pointA, Vector pointB, Vector pointC)
{
    return distance(pointB, pointC) + distance(pointA, pointC) +
           distance(pointA, pointB);
}
 
// 返回三角形面积, 向量叉积的二分之一的绝对值
double triArea(Vector vecA, Vector vecB, Vector vecC)
{
    return fabs(cross(sub(vecB, vecA), sub(vecC, vecA))) / 2.0;
}
 
int main()
{
    Vector pointA;
    Vector pointB;
    Vector pointC;
 
    scanf("%lf %lf %lf %lf %lf %lf", &pointA.x, &pointA.y, &pointB.x, &pointB.y,
          &pointC.x, &pointC.y);
 
    double rest = triArea(pointA, pointB, pointC);
 
    // 判断平面三点是否可构成三角形, 即叉积不为零
    if (rest)
    {
        printf("L = %.2lf, A = %.2lf", triPer(pointA, pointB, pointC), rest);
    }
    else
    {
        printf("Impossible");
    }
 
    return 0;
}

总结

近期在学OpenGL, 顺便学点图形学, 顺便也就学点线性代数, 这就是另外一个世界了.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/770135.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

详解C#开发Android应用程序的流程

Android系统一下子铺天盖地而来&#xff0c;让人目不暇接。兴奋的同时也让部分开发人员犯难了&#xff01;要知道从熟知的Wince、Mobile开发语言C#跨越到RFID-Android的Java。可不是一朝一夕就能完成的。就好比你的乾坤大挪移已经第七层了&#xff0c;却忽然要你从易筋经从头练…

LiveGBS流媒体平台GB/T28181功能-报警信息报警订阅配置报警预案告警触发报警时截图及录像

LiveGBS国标GB/T28181报警信息报警订阅配置报警预案告警触发报警时截图及录像 1、报警信息1.1、报警查询1.2、配置开启报警订阅1.2.1、国标设备编辑1.2.2、选择开启报警订阅 1.3、配置摄像头报警1.3.1、配置摄像头报警通道ID1.3.2、配置摄像头开启侦测1.3.3、尝试触发摄像头报警…

Fofa搜索技巧(理论加实践的整理)

目录 题记技巧&#xff08;我一般找国内的&#xff0c;所以下边一直加cn&#xff09;1、搜索HTTP响应头中含有"thinkphp"关键词的网站和IP。2、加上标题带有后台的。3、加上时间&#xff0c;现在新网站有thinkphp日志泄露的有很多。4、搜索html正文中含有"管理…

macboock Air mac系统phpstudy安装php8操作

现在mac的phpstudy的php版本只能到7.3&#xff0c;而有的网站需要8.0以上的版本&#xff0c;那就要手动进行安装 安装后的效果 操作一 安装php8.2的版本 brew install php8.2完成后的地址 /usr/local/Cellar/php/8.2.8 进入/usr/local/Cellar/php/&#xff0c;复制整个文件…

通过监控平台提高运维效率、降低运营成本、实现绿色低碳、节能降耗、提升PUE值-安科瑞黄安南

01引言 近年来&#xff0c;随着母线槽在建筑及工厂的配电中越来越广泛&#xff0c;母线槽场景运用得越多&#xff0c;随着数据中心建设的快速发展和更高需求&#xff0c;智能母线系统逐渐被应用于机房的末端配电中&#xff0c;具有电流小、插接方便、智能化程度高等特点&#…

【深度学习论文阅读】四大分类网络之AlexNet

ImageNet Classification with Deep Convolution Nerual Networks 论文原文&#xff1a;ImageNet Classification with Deep Convolutional Neural Networks 1 引言 解决的问题&#xff1a; 提高效率&#xff08;GPU训练&#xff09;&#xff0c;防止过拟合&#xff08;drop…

VCSEL器件的常见参数有哪些?如何测试?

概述 垂直腔面发射激光器(VCSEL)是一种激光发射方向垂直于P-N结平面,而谐振腔面平行于P-N结平面的半导体激光器,它属于面发射激光器的一种。而EEL边射型激光器的光则是沿着水平方向,由芯片的边缘射出。与EEL相比, VCSEL的生产过程更具经济效益并且响应快,因此在越来越多的应用中…

cocosCreator笔记 之Android打包

版本&#xff1a; v3.4.0 环境&#xff1a; Mac 简介 cocosCreator打包APK包&#xff0c;需要AndroidStudio 4.1版本以上的支持&#xff0c;不支持Eclipse的ANT构建。大概的环境配置&#xff1a; 下载Java SE Development Kit 8 Downloads , 安装JAVA环境下载 Android Studi…

让 AI 真正读懂人类语言,5分钟搞懂 word embedding 技术

大家好啊&#xff0c;我是董董灿。 在学习自然语言处理(NLP&#xff0c;Natural Language Processing)时&#xff0c;最先遇到的一个概念&#xff0c;可能就是词嵌入(word embedding)了。 词嵌入&#xff0c;是让AI真正理解人类自然语言的技术(看完本文再回过头来看这句话&am…

【分布式系统案例课】计数服务之计数服务设计

计数服务如何实现 回顾需求 对于可扩展&#xff1a;对写入的数据进行分区。 对于高性能&#xff1a;借助缓存技术的处理&#xff0c;为了提高吞吐量&#xff0c;需要做批量batch批处理 对于高可靠&#xff1a;不丢数据&#xff0c;需要对数据进行持久化&#xff0c;还要借助复…

After Effects(AE)如何选择电脑硬件?

处理器&#xff08;CPU&#xff09; 处理器&#xff08;或 CPU&#xff09;是 After Effects 工作站最重要的部件之一。虽然 GPU 加速越来越受欢迎&#xff0c;但现在您选择的 CPU 通常会对整体系统性能产生更大的影响。然而&#xff0c;After Effects 使用 CPU 的方式意味着仅…

github.com网站提示无法访问此页面——亲测有效(已解决)

最近在看stepin-template的vue3版本&#xff0c;发现这个后台框架还是有很多不足的地方。于是想要提交一个关于菜单折叠展开的issue。 但是一打开github.com网站&#xff0c;就提示下图了&#xff1a; 于是百度搜索解决办法&#xff1a; 附上大神提供的解决办法&#xff1a;g…

Navicat分配子用户及权限管理

一、创建用户&#xff0c;分配权限 新建用户 输入要创建的子用户的信息 主机名 表示访问本服务的方式&#xff0c;%表示即可以本机访问&#xff0c;也可以远程访问 之后&#xff0c;我们给创建的用户分配权限&#xff08;在该数据库的可操作空间&#xff09; 为用户分配增删改…

SciencePub学术 | 计算机语音类重点SCIEEI征稿中

SciencePub学术 刊源推荐: 计算机语音类重点SCIE&EI征稿中&#xff01;信息如下&#xff0c;录满为止&#xff1a; 一、期刊概况&#xff1a; 计算机语音类重点SCIE 【期刊简介】IF&#xff1a;4.0-4.5&#xff0c;JCR2区&#xff0c;中科院3区&#xff1b; 【出版社】世…

结构型模式 - 桥接模式

概述 现在有一个需求&#xff0c;需要创建不同的图形&#xff0c;并且每个图形都有可能会有不同的颜色。我们可以利用继承的方式来设计类的关系&#xff1a; 我们可以发现有很多的类&#xff0c;假如我们再增加一个形状或再增加一种颜色&#xff0c;就需要创建更多的类。 试想…

数据结构(王道)——数据结构之 树

一、数据结构-树的定义 树的概念补充&#xff1a; 树型逻辑结构图 结点之间的关系描述 结点、树的属性描述&#xff1a; 有序树、无序树&#xff1a; 树和森林&#xff1a; 树的总结&#xff1a; 二、树的性质 概念总结&#xff1a;

2023年四川大学生程序设计竞赛-K.倒转乾坤

Cuber QQ 现在手上有两个圆环&#xff0c;其中小圆环的直径是 d&#xff0c;大圆环的直径是 2d 。他将小圆环放在大圆环内&#xff0c; 并让小圆环紧贴大圆环内壁进行无滑动的滚动。 Cuber QQ 总是喜欢动态的美&#xff0c;他在小圆环上等间隔地标记了 n 个点&#xff0c;他想…

存储服务的演化与MySQL分库分表

文章目录 一、存储服务的演化1.单体结构2.单表单库的数据量膨胀 -> 分库分表3.单个MySQL的读写压力过大 -> MySQL索引优化4.进一步缓解MySQL读写压力 -> 读写分离5.冷热数据分离 -> 使用Redis缓存 二、MySQL分库分表1.策略2.需要注意的问题 一、存储服务的演化 1.…

「深度学习之优化算法」(十六)万有引力算法

1. 万有引力算法简介 (以下描述,均不是学术用语,仅供大家快乐的阅读) 万有引力算法(Gravitational Search Algorithm)是受物体之间的万有引力启发而提出的算法。算法提出于2008(2009)年,时间不长,不过相关的文章和应用已经相对较多,也有不少的优化改进方案。   万…

浅谈性能测试策略之银行测试

一、性能测试的四个方面 在一般的性能测试讨论中大家通常只围绕三个方面进行提问和总结&#xff1a;测试脚本如何编写&#xff0c;被测系统如何监控&#xff0c;性能瓶颈如何调优。大部分刚刚接触性能测试的人会纠结于脚本的编写&#xff0c;如何设置参数化、如何设置关联、何时…