首页 > 编程语言 >计算两条直线夹角(C++)

计算两条直线夹角(C++)

时间:2023-08-07 12:36:50浏览次数:28  
标签:直线 const double C++ v1 v2 Vector 夹角 向量


计算两条直线的锐角可以使用向量的知识来实现。在C++中,我们可以定义一个函数来计算两个向量的夹角,并根据夹角的余弦值来判断角度的大小。以下是一个用C++编写的示例代码:

#include <iostream>
#include <cmath>

using namespace std;

struct Vector {
    double x;
    double y;
};

// 计算向量的长度
double vectorLength(const Vector& v) {
    return sqrt(v.x * v.x + v.y * v.y);
}

// 计算两个向量的点积
double dotProduct(const Vector& v1, const Vector& v2) {
    return v1.x * v2.x + v1.y * v2.y;
}

// 计算两个向量的夹角(以弧度为单位)
double angleBetweenVectors(const Vector& v1, const Vector& v2) {
    double cosTheta = dotProduct(v1, v2) / (vectorLength(v1) * vectorLength(v2));
    return acos(cosTheta);
}

int main() {
    Vector line1, line2;

    cout << "请输入第一条直线的向量(x, y): ";
    cin >> line1.x >> line1.y;

    cout << "请输入第二条直线的向量(x, y): ";
    cin >> line2.x >> line2.y;

    double angle = angleBetweenVectors(line1, line2);

    // 将弧度转换为角度
    double degrees = angle * 180.0 / M_PI;

    cout << "两条直线的锐角为: " << degrees << "度" << endl;

    return 0;
}

请注意,这个示例代码假设两个向量表示的直线起点都在原点 (0, 0) 处。如果直线起点不在原点,我们需要将其平移到原点后再进行计算。同时,还应该处理除数为零的情况和其他异常情况。此处示例代码仅用于演示如何计算两条直线的锐角。


标签:直线,const,double,C++,v1,v2,Vector,夹角,向量
From: https://blog.51cto.com/u_15699099/6992444

相关文章

  • c++中unique_ptr 的使用和理解
    unique_ptr的使用std::unique_ptr是c++11起引入的智能指针,为什么必须要在c++11起才有该特性,主要还是c++11增加了move语义,否则无法对对象的所有权进行传递。unique_ptr介绍unique_ptr不共享它的指针。它无法复制到其他unique_ptr,无法通过值传递到函数,也无法用于需要副本的......
  • 【开源三方库】Aki:一行代码极简体验JS&C++跨语言交互
     开源项目 OpenHarmony是每个人的 OpenHarmony 一、简介OpenAtom OpenHarmony(以下简称“OpenHarmony”)的前端开发语言是ArkTS,在TypeScript(简称TS)生态基础上做了进一步扩展,继承了TS的所有特性,是JavaScript(简称JS)的超集。而Node-API(简称NAPI)是方舟引擎用于封装JS能力为......
  • c++中的weak_ptr的使用与理解
    weak_ptr的使用\(\quad\)关于为什么使用weak_ptr,以及他的使用场景,我们在这篇文章中已经进行了介绍。而对于其具体的使用方法,比如说如何通过weak_ptr访问内存中的数据等操作还未提及,这里做个简单赘述。\(\quad\)有一句话说的很好:weak_ptr就像观测者那样观测资源的使用情况......
  • C++实现高精度减法
    一、问题描述:    高精度算法是处理大数字的数学计算方法。在一般的科学计算中,会经常算到小数点后几百位或者更多,当然也可能是几千亿几百亿的大数字。一般这类数字我们统称为高精度数,高精度算法是用计算机对于超大数据的一种模拟加,减,乘,除,乘方,阶乘,开方等运算。对于非常庞大......
  • 配置 Sublime Text4为 C++ 编辑器的方法
    概述涉及以下插件的安装和配置PackageControl Terminus LSP LSP-clangd clang-format LSP-pyright LSP-json配置sublime安装PackageControl以进行包管理。Terminus安装Terminus以实现sublimetext4内的terminal。绑定快捷键:[ { "keys":[ "ctrl+shift+t" ], "com......
  • msvc++工程之vs版本升级及工程目录规范
    为什么要升级msvc++工程版本对msvc++工程进行vs版本升级,一方面是可以使用较新的C++标准及对64位更好的支持。首先你需要对msvc++project文件有一定的了解,主要是vcxproj和vcxproj.filter这两个文件,升级的时候需要手动修改sln和vcxproj文件。vs(visualstuiod)中vc++工程的Filte......
  • C++核心编程——引用
    引用1引用的基本使用作用:给变量起别名语法:数据类型&别名=原名示例:intmain(){ inta=10; int&b=a; cout<<"a="<<a<<endl; cout<<"b="<<b<<endl; b=100; cout<<"a="&......
  • C与C++之间的相互调用及函数区别
    最近项目需要使用googletest(以下简称为gtest)作为单元测试框架,但是项目本身过于庞大,main函数无从找起,需要将gtest框架编译成静态库使用。因为项目本身是通过纯c语言编写,而gtest则是一个c++编写的测试框架,其中必然涉及c与c++之间的相互调用。注意,本文的前提是,c代码采用gcc等c语言编......
  • C/C++经典书籍
    记录四本C/C++的经典书籍。最经典的莫过于1988年出版的《TheCProgrammingLanguage》第二版1.C1.1零基础:CPrimerPlus,SixthEdition,作者:StephenPrata,2013年出版,涵盖C11标准1.2C语言作者巨著(适合有C基础的阅读):TheCProgrammingLanguage,SecondEdition,作者:Denni......
  • C++入门到放弃(09)——友元:friend
    ​1.基本用法友元的概念还是比较简单的,主要作用是,让声明的友元函数或者友元类,可以直接访问当前类的私有成员。可以这样理解,友元声明代表了,向大家说明这个函数或类是我的朋友(friend),因此它可以随意使用我内部的私有成员。基本形式:friend+函数声明friend+class+类名classPoin......