计算点到线的距离(友元)

计算点到直线的距离。类定义的基本要求:

  1. 定义一个点类Point,包含有2 个私有数据成员x和y,表示点的坐标;一个构造函数。
  2. 定义一个直线类Line,包含有3 个私有数据成员a,b和c,表示直线方程ax+by+c= 0;一个构造函数。

说明:

计算点(x,y)到直线ax+by+c=0的距离d的计算公式如下:

00.bmp

\

实现要求:

应用友元函数/类完成。要求分别用如下三种方式完成:

方法一:定义全局函数(非成员函数)dist,并将其声明为Point和Line的友元函数,通过调用dist函数完成题目计算点到线距离的要求。
方法二:为Line定义成员函数dist,并将其声明为类Point的友元函数,通过Line的dist成员函数完成题目计算点到线距离的要求。
方法三:为Line定义成员函数dist,并声明Line类为Point类的友元类,通过Line的dist成员函数完成题目计算点到线距离的要求。

输入格式:

输入两行
第一行输入两个实数,表示点坐标x,y的值;
在第二行中三个实数,表示直线方程的三个系数a,b,c,题目保证a和b不为0.

输出格式:

输出点到直线的距离(保留两位小数)。

输入样例:

在这里给出一组输入。例如:

1.1 2.3
2 3.4 5.6

输出样例:

在这里给出相应的输出。例如:

The distance is: 3.96

 

#include<iostream>
#include<cmath>
#include<string>
#include <iomanip>   // 用于设置输出精度
using namespace std;// 前向声明
class Line;// 点类
class Point {
private:double x, y;public:// 构造函数Point(double _x, double _y) : x(_x), y(_y) {}// 友元函数声明friend double dist(const Point& c1, const Line& c2);
};// 直线类
class Line {
private:double a, b, c;public:// 构造函数Line(double _a, double _b, double _c) : a(_a), b(_b), c(_c) {}// 友元函数声明friend double dist(const Point& c1, const Line& c2);
};// 计算点到直线的距离
double dist(const Point& c1, const Line& c2) {// 计算分子和分母double numerator = fabs(c2.a * c1.x + c2.b * c1.y + c2.c);double denominator = sqrt(c2.a * c2.a + c2.b * c2.b);// 计算距离double d = numerator / denominator;return d;
}int main() {double x, y, a, b, c;cin >> x >> y;cin >> a >> b >> c;// 创建点对象和直线对象Point c1(x, y);Line c2(a, b, c);// 输出距离,保留两位小数cout << "The distance is: " << fixed << setprecision(2) << dist(c1, c2);return 0;
}

 

 

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

论文笔记:A Simple and Effective Pruning Approach for Large Language Models

iclr 2024 reviewer 评分 5668 1 intro 大模型网络剪枝的paper 在努力保持性能的同时&#xff0c;舍弃网络权重的一个子集现有方法 要么需要重新训练 这对于十亿级别的LLMs来说往往不现实要么需要解决依赖于二阶信息的权重重建问题 这同样可能带来高昂的计算成本——>引入…

CSS核心样式-02-盒模型属性及扩展应用

目录 三、盒模型属性 常见盒模型区域 盒模型图 盒模型五大属性 1. 宽度 width 2. 高度 height 3. 内边距 padding 四值法 三值法 二值法 单值法 案例 4. 边框 border 按照属性值的类型划分为三个单一属性 ①线宽 border-width ②线型 border-style ③边框颜色 bo…

VMware Workstation部署最新版OpenWrt 23.05.3

正文共&#xff1a;1456 字 51 图&#xff0c;预估阅读时间&#xff1a;2 分钟 我们之前介绍了如何在VMware Workstation上安装OpenWrt&#xff08;软路由是啥&#xff1f;OpenWrt又是啥&#xff1f;长啥样&#xff1f;在VMware装一个瞅瞅&#xff09;&#xff0c;也介绍了如何…

【Linux学习笔记】安卓运行C可执行文件No such file or directory

文章目录 开发环境运行失败现象解决办法方法一&#xff1a;使用静态库方法二&#xff1a;使用动态库创建lib查找依赖库复制需要注意的事情 开发环境 开发板&#xff1a;正点原子RK3568开发板安卓版本&#xff1a;11可执行程序命名&#xff1a;ledApp需加载模块&#xff1a;dts…

阐述嵌入式系统的基本组成:硬件层、驱动层、操作系统层和应用层

大家好&#xff0c;今天给大家介绍阐述嵌入式系统的基本组成&#xff1a;硬件层、驱动层、操作系统层和应用层&#xff0c;文章末尾附有分享大家一个资料包&#xff0c;差不多150多G。里面学习内容、面经、项目都比较新也比较全&#xff01;可进群免费领取。 嵌入式系统是一种能…

3D Gaussian Splatting for Real-Time Radiance Field Rendering 在AutoDl上部署

目录 一. 租用AutoDl服务器二. Xtfp与服务器链接三. 本地训练准备数据3.1准备数据3.2 代码和模块下载 四. autodl环境配置4.1准备4.2 配置4.3 训练 五. 总结Reference 一. 租用AutoDl服务器 1.1 进入官网进行注册 1.2 点击算力市场租服务器&#xff0c;&#xff08;下图4090是…

vscode配置c\c++及美化

文章目录 vscode配置c\c及美化1.安装vscode2.汉化3.安装c\c插件4.安装mingw5.配置mingw6. 运行c代码6.1 创建代码目录6.2 设置文件配置6.3 创建可执行任务&#xff1a;task.json6.4 编译执行6.5 再写其他代码6.6 运行多个c文件 7. 运行c文件8.调式代码8.1 创建launch.json8.2 修…

腐蚀Rust 服务端搭建架设个人社区服务器Windows教程

腐蚀Rust 服务端搭建架设个人社区服务器Windows教程 大家好我是艾西&#xff0c;一个做服务器租用的网络架构师也是游戏热爱者。最近在steam发现rust腐蚀自建的服务器以及玩家还是非常多的&#xff0c;那么作为服务器供应商对这商机肯定是不会放过的哈哈哈&#xff01; 艾西这…

Quantum Temple借助Sui通过NFT推动再生旅游

从金融到艺术&#xff0c;从游戏到无线网络&#xff0c;各行各业都涌现出大量初创公司&#xff0c;利用区块链技术颠覆现状。说到旅游业&#xff0c;让人联想到拥挤的机场、快节奏的旅游和豪华游轮&#xff0c;可能看起来对区块链创新持守旧态度。一家初创公司认为现在是时候改…

Redis入门到通关之String命令

文章目录 ⛄1 String 介绍⛄2 命令⛄3 对应 RedisTemplate API❄️❄️ 3.1 添加缓存❄️❄️ 3.2 设置过期时间(单独设置)❄️❄️ 3.3 获取缓存值❄️❄️ 3.4 删除key❄️❄️ 3.5 顺序递增❄️❄️ 3.6 顺序递减 ⛄4 以下是一些常用的API⛄5 应用场景 ⛄1 String 介绍 Stri…

LinuxAndroid: 旋转编码器input输入事件适配(旋转输入)

rk3588s: 旋转编码器input输入事件适配 基于Android 12 kernel-5.10版本 参考文档&#xff1a; https://blog.csdn.net/szembed/article/details/131551950 Linux 输入设备调试详解&#xff08;零基础开发&#xff09;Rotary_Encoder旋转编码器驱动 通用GPIO为例 挂载input输…

最前沿・量子退火建模方法(1) : subQUBO讲解和python实现

前言 量子退火机在小规模问题上的效果得到了有效验证&#xff0c;但是由于物理量子比特的大规模制备以及噪声的影响&#xff0c;还没有办法再大规模的场景下应用。 这时候就需要我们思考&#xff0c;如何通过软件的方法怎么样把大的问题分解成小的问题&#xff0c;以便通过现在…