空间解析几何5-空间圆到平面的距离【附MATLAB代码】
目录
理论公式
matlab代码
理论公式







matlab代码
function [dis,P,Q,L]=Circle2PlaneDistance(T,R,n,Pn)
% output
% dis 为最短距离,P为距离最短时圆上的点 Q为P对应的投影点 L为最小值有几个
% input
% T为园心到基坐标系的变换矩阵 R为圆半径 n为平面的单位法向量,Pn为平面上一点
d = 1000;
alf = 0;
sym i;
y=0;
P=[];
Q=[];
L = 0;
A = R*(n(1)*T(1,1)+n(2)*T(2,1)+n(3)*T(3,1));
B = R*(n(1)*T(1,2)+n(2)*T(2,2)+n(3)*T(3,2));
C = n(1)*T(1,4)+n(2)*T(2,4)+n(3)*T(3,4)-(n(1)*Pn(1)+n(2)*Pn(2)+n(3)*Pn(3));
if(B==0)theta(1) = 0;theta(2) = pi;i=2;if(-1<=C&&C<=1)theta(3) = acos(-C);i=3;endfor t=1:ib = sqrt((A*cos(theta(t))+B*sin(theta(t))+C)^2);if(b<d)d=b;alf = theta(t);endif(abs(b) < 1e-8)alf = theta;P = [R*T(1,1)*cos(alf)+R*T(1,2)*sin(alf)+T(1,4),R*T(2,1)*cos(alf)+R*T(2,2)*sin(alf)+T(2,4),R*T(3,1)*cos(alf)+R*T(3,2)*sin(alf)+T(3,4)];tt = n(1)*P(1)+n(2)*P(2)+n(3)*P(3)-(n(1)*Pn(1)+n(2)*Pn(2)+n(3)*Pn(3));Q = [Q;P(1)-n(1)*tt,P(2)-n(2)*tt,P(3)-n(3)*tt];L=L+1;endend
end
if(A==0)theta(1) = pi/2;theta(2) = -pi/2;i=2;if(-1<=C&&C<=1)theta(3) = asin(-C);i=3;endfor t=1:ib = sqrt((A*cos(theta(i))+B*sin(theta(i))+C)^2);if(b<d)d=b;alf = theta(t);endif(abs(b) < 1e-8)alf = theta;P = [R*T(1,1)*cos(alf)+R*T(1,2)*sin(alf)+T(1,4),R*T(2,1)*cos(alf)+R*T(2,2)*sin(alf)+T(2,4),R*T(3,1)*cos(alf)+R*T(3,2)*sin(alf)+T(3,4)];tt = n(1)*P(1)+n(2)*P(2)+n(3)*P(3)-(n(1)*Pn(1)+n(2)*Pn(2)+n(3)*Pn(3));Q = [Q;P(1)-n(1)*tt,P(2)-n(2)*tt,P(3)-n(3)*tt];L=L+1;endend
end
u = A*B-B*C;
v = 2*A*A-2*B*B-2*A*C;
w = -6*A*B;
g = 2*B*B-2*A*A-2*A*C;
h = A*B+B*C;
[u,v,w,g,h];if(u == 0&&v==0&&w==0)root = 0;i = 1;else if(u == 0&&v==0)[root,y,i]= Solve2OrderEquaton([v,w,g,h]);else if(u == 0)[root,y,i]= Solve3OrderEquaton([v,w,g,h]);else[root,y,i] = Solve4OrderEquaton([u,v,w,g,h]);endendendfor t=1:itheta = 2*atan(root(t));b = sqrt((A*cos(theta)+B*sin(theta)+C)^2);if(b<d)d=b;alf = theta;endif(abs(b) < 1e-8)alf = theta;P = [R*T(1,1)*cos(alf)+R*T(1,2)*sin(alf)+T(1,4),R*T(2,1)*cos(alf)+R*T(2,2)*sin(alf)+T(2,4),R*T(3,1)*cos(alf)+R*T(3,2)*sin(alf)+T(3,4)];tt = n(1)*P(1)+n(2)*P(2)+n(3)*P(3)-(n(1)*Pn(1)+n(2)*Pn(2)+n(3)*Pn(3));Q = [Q;P(1)-n(1)*tt,P(2)-n(2)*tt,P(3)-n(3)*tt];L=L+1;endend
TB = alf*180/pi;
dis = d;
if(abs(dis) > 1e-8)P = [R*T(1,1)*cos(alf)+R*T(1,2)*sin(alf)+T(1,4),R*T(2,1)*cos(alf)+R*T(2,2)*sin(alf)+T(2,4),R*T(3,1)*cos(alf)+R*T(3,2)*sin(alf)+T(3,4)];tt = n(1)*P(1)+n(2)*P(2)+n(3)*P(3)-(n(1)*Pn(1)+n(2)*Pn(2)+n(3)*Pn(3));Q = [P(1)-n(1)*tt,P(2)-n(2)*tt,P(3)-n(3)*tt];L=L+1;
end
endfunction [root,y,i] = Solve4OrderEquaton(parameter)
a=parameter(2)/parameter(1);
b=parameter(3)/parameter(1);
c=parameter(4)/parameter(1);
d=parameter(5)/parameter(1);a3=1;
b3=-b;
c3=(a*c-4*d);
d3=-(a^2*d-4*b*d+c^2);
parameter3=[a3,b3,c3,d3];
[root3,y3,i3] = Solve3OrderEquaton(parameter3);
i=0;
root=[];
for j=1:length(root3)if(a^2/4-b+root3(j)<0||root3(j)^2/4-d<0)continue;endalpha=sqrt(a^2/4-b+root3(j));beta=sqrt(root3(j)^2/4-d);if(a*root3(j)/2-c>0)a21=1;b21=a/2-alpha;c21=root3(j)/2-beta;parameter21=[a21,b21,c21];[root21,y21,i21] = Solve2OrderEquaton(parameter21);a22=1;b22=a/2+alpha;c22=root3(j)/2+beta;parameter22=[a22,b22,c22];[root22,y22,i22] = Solve2OrderEquaton(parameter22);elsea21=1;b21=a/2-alpha;c21=root3(j)/2+beta;parameter21=[a21,b21,c21];[root21,y21,i21] = Solve2OrderEquaton(parameter21);a22=1;b22=a/2+alpha;c22=root3(j)/2-beta;parameter22=[a22,b22,c22];[root22,y22,i22] = Solve2OrderEquaton(parameter22);endroot4{j}=[root21,root22];i4{j}=[i21,i22];root=[root,root4{j}];i=i+i21+i22;break
end
for i_index=length(root):-1:1for j=i_index-1:-1:1if(abs(root(i_index)-root(j))<0.00001)root=root(1:length(root)-1);i=i-1;break;endend
end
y=root.^4+a*root.^3+b*root.^2+c*root+d;
end
function [root,y,i] = Solve3OrderEquaton(parameter)
a=parameter(1);
b=parameter(2);
c=parameter(3);
d=parameter(4);
a_2=a*a;
a_3=a_2*a;
b_2=b*b;
b_3=b_2*b;
p=c/3/a-b_2/9/a_2;
q=d/2/a+b_3/27/a_3-b*c/6/a_2;
delta=q*q+p^3;
if(delta>0)i=1;root=nthroot(-q+sqrt(delta),3)+nthroot(-q-sqrt(delta),3)-b/3/a;
elseif(delta==0)i=2;root(1)=-2*nthroot(q,3)-b/3/a;root(2)=nthroot(q,3)-b/3/a;
elsei=3;alpha=1/3*acos(-q*sqrt(-p)/p^2);root(1)=2*sqrt(-p)*cos(alpha)-b/3/a;root(2)=2*sqrt(-p)*cos(alpha+2/3*pi)-b/3/a;root(3)=2*sqrt(-p)*cos(alpha+4/3*pi)-b/3/a;
end
y=a*root.^3+b*root.^2+c*root+d;
endfunction [root,y,i] = Solve2OrderEquaton(parameter)
a=parameter(1);
b=parameter(2);
c=parameter(3);
delta=b^2-4*a*c;
if(delta>0)i=2;root(1)=(-b+sqrt(delta))/2/a;root(2)=(-b-sqrt(delta))/2/a;
elseif(delta==0)i=1;root=-b/2/a;
elsei=0;root=[];
end
y=a*root.^2+b*root+c;
end
测试代码:
Tc1 = [ -0.5662 0.7741 0.2831 1.0000;-0.6924 -0.6330 0.3462 1.0000;0.4472 0 0.8944 1.0000;0 0 0 1.0000];
R = 3;
n = [0 0 1];
pn = [0 0 0];
[dis,P,Q] = Circle2PlaneDistance(Tc1,R,n,Pn)
测试结果:

相关文章:
空间解析几何5-空间圆到平面的距离【附MATLAB代码】
目录 理论公式 matlab代码 理论公式 matlab代码 function [dis,P,Q,L]Circle2PlaneDistance(T,R,n,Pn) % output % dis 为最短距离,P为距离最短时圆上的点 Q为P对应的投影点 L为最小值有几个 % input % T为园心到基坐标系的变换矩阵 R为圆半径 n为平面的单位法向…...
[已解决] pycharm添加本地conda虚拟环境 + 配置解释器 - pycharm找不到conda可执行文件
目录 问题: 方法: 补充:创建conda虚拟环境 参考文档:pycharm找不到conda可执行文件怎么办?-CSDN 问题: 1.显示:未为项目配置 Python 解释器 2.想在pycharm中使用本地创建的虚拟环境 方法&a…...
SENT - Single Edge Nibble Transmission for Automotive
SENT 总线的特征和优势 SENT 总线是一种数字信号传输协议,具有更高的传输精度和速度;SENT 总线是单线传输数据,减少信号线,降低成本。加上电源和地线,总共 3 线;SENT 总线具有更强大的诊断功能;…...
2024年软件设计师中级(软考中级)详细笔记【7】面向对象技术(下)23种设计模式(分值10+)
目录 前言阅读前必看 第七章 面向对象技术(下)7.3 设计模式(固定4分)7.3.1 设计模式的要素7.3.2 创建型设计模式7.3.2.1 Abstract Factory(抽象工厂)7.3.2.2 Builder(生成器)7.3.2.3…...
未来人工智能的发展对就业市场的影响 人工智能在生活中的相关
人工智能(Artificial Intelligence),英文缩写为AI.是新一轮科技革命和产业变革的重要驱动力量, 是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门新的技术科学. 人工智能的发展对就业市场的影响主要…...
Oracle EBS 中财务模块
Oracle E-Business Suite (EBS) 提供了全面的财务管理解决方案,涵盖了企业财务活动的各个方面。以下是EBS中主要的财务模块及其功能概述: 总账(General Ledger, GL):Oracle EBS 中 GL 模块的财务流程概览-CSDN博客 总账…...
基于SSM公廉租房维保系统的设计
管理员账户功能包括:系统首页,个人中心,业主管理,维修单位管理,房屋信息管理,维修申报管理,维修完成,房屋维护管理 业主账号功能包括:系统首页,个人中心&…...
【AI大模型】深入Transformer架构:解码器部分的实现与解析
目录 🍔 解码器介绍 🍔 解码器层 2.1 解码器层的作用 2.2 解码器层的代码实现 2.3 解码器层总结 🍔 解码器 3.1 解码器的作用 3.2 解码器的代码分析 3.3 解码器总结 学习目标 🍀 了解解码器中各个组成部分的作用. &#…...
前端html js css 基础巩固3
一个这样的首页 滑动显示 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title>&l…...
如在下载自己的需要的rmp包呢
下载地址:https://pkgs.org/和https://rpmfind.net/linux/rpm2html/search.php 根基自己的需要进行下载使用。...
Android TextView实现一串文字特定几个字改变颜色
遇到一个需求,让Android端实现给定一个字符串指定下标的几个字颜色与其他字颜色不一致。 主要是用ForegroundColorSpan这个API来传入颜色值,用SpannableString来设置指定索引下标的字的颜色值。 这里通过给定一个输入文字描述框,要求输入指定…...
桃子叶片病害分类检测数据集(猫脸码客 第221期)
桃子叶片病害分类检测数据集 一、引言 桃子作为世界上广泛种植的果树之一,其叶片的健康状况直接关系到果实的产量和品质。然而,桃子叶片易受多种病害的侵袭,这些病害不仅影响叶片的光合作用,还可能导致果实减产、品质下降&#…...
Vue--》掌握自定义依赖引入的最佳实践
在现代前端开发中,vue凭借其灵活性和高效性,已成为开发者们的宠儿,然而随着项目的复杂度提升,如何高效地管理和引入依赖,尤其是自定义引入依赖,成为了许多开发者面临的一大挑战。无论是为了优化加载速度&am…...
repo 命令大全详解(第十四篇 repo overview)
repo overview 命令用于显示当前项目的概览信息,帮助用户快速了解项目的状态和分支信息。 参数分类及解释 基本参数 [--current-branch]: 可选,仅考虑已检出的分支。 示例: repo overview --current-branch [<project>...]: 可选,指定…...
【设计模式】深入理解Python中的抽象工厂设计模式
深入理解Python中的抽象工厂设计模式 设计模式是软件开发中解决常见问题的经典方案,而**抽象工厂模式(Abstract Factory Pattern)**是其中非常重要的一种创建型模式。抽象工厂模式的主要作用是提供一个接口,创建一系列相关或依赖…...
网站建设完成后,多久需要升级迭代一次
网站建设完成后,一般每隔几个月就会进行一次迭代升级。以下是关于网站迭代周期和原因的具体分析: 更新频率:网站在建设完成后,一般每隔几个月就会进行一次迭代升级。这种周期性的更新有助于保持网站的现代感和竞争力。更新目的&a…...
一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字
这里写目录标题 问题详情分析问题代码展示 问题详情 剑指 Offer 56: 一个整型数组 nums 里除两个数字之外,其他数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n),空间复杂度是O(1)。 示例: 输入&a…...
Vue基本学习2
Vue使用方法 <script src"js/vue.js"></script><script>/*** Mode1:数据模型,负责数据存储(后台业务逻辑/数据库)* View:视图层,负责页面展示(HTML)* View Model(Vue):负责业务逻辑处理(比如Ajax请求等)* view 与 Model 数…...
创作者等级权益说明
创作者等级权益说明 一、如何查看创作者等级权益二、等级权益对照表 一、如何查看创作者等级权益 step1:鼠标移动至头像,显示如下图的浮窗 step2:点击我的等级,即跳转到创作者等级权益页面 图1.1 我的等级 图1.2 创作者等级权益…...
基于SpringBoot+Vue+uniapp微信小程序的校园反诈骗微信小程序的详细设计和实现(源码+lw+部署文档+讲解等)
项目运行截图 技术框架 后端采用SpringBoot框架 Spring Boot 是一个用于快速开发基于 Spring 框架的应用程序的开源框架。它采用约定大于配置的理念,提供了一套默认的配置,让开发者可以更专注于业务逻辑而不是配置文件。Spring Boot 通过自动化配置和约…...
Highlight.js在Vue3中的性能优化指南:按需加载 vs 全量引入
Highlight.js在Vue3中的性能优化实战:从全量引入到精准加载 当你的Vue3项目需要展示代码片段时,Highlight.js无疑是语法高亮的首选方案。但在大型应用中,直接全量引入这个强大的工具可能会让你的打包体积意外膨胀——完整的Highlight.js包含超…...
别再死记硬背了!用Codesys可视化玩转按钮和指示灯:5个工业场景实战案例拆解(含配方管理思路)
Codesys可视化实战:5个工业场景下的按钮与指示灯高阶应用 在工业自动化领域,人机界面(HMI)的设计直接影响操作效率和系统可靠性。传统PLC编程往往过于关注功能实现而忽视交互体验,导致许多工业现场的操作面板充斥着杂乱无章的按钮和难以理解的…...
靠专业建议收咨询费!传统旅游顾问转型AI行程规划师,如何在高定市场赚大钱
“上个月,我的咨询费增了好多。”说出这个数字时,前旅行社门店顾问小雅脸上带着自信的笑容。曾经的“人肉攻略机器”到如今的AI高端定制规划师,小雅的转型故事,或许能给所有被困在低价内卷里的旅游从业者带来全新的思路。一、转型…...
基于大数据与深度学习的二手房价格预测系统设计与实现-完整源码论文毕设项目
博主介绍:👉全网个人号和企业号粉丝40W,每年辅导几千名大学生较好的完成毕业设计,专注计算机软件领域的项目研发,不断的进行新技术的项目实战👈 ⭐️热门专栏推荐订阅⭐️ 订阅收藏起来,防止下次找不到 &am…...
Dify Agent实战:手把手教你用思维链(CoT)模式打造一个能“思考”的AI助手
Dify Agent实战:用思维链(CoT)构建会思考的AI助手 在当今AI技术快速发展的背景下,如何让AI助手不仅能回答问题,还能像人类一样"思考"并解决复杂问题?这正是思维链(Chain of Thought, CoT)技术要解…...
极简办公:OpenClaw+Qwen3.5-9B自动回复日常邮件模板
极简办公:OpenClawQwen3.5-9B自动回复日常邮件模板 1. 为什么需要邮件自动化助手 每天早晨打开邮箱,总能看到十几封格式雷同的咨询邮件——产品报价、技术支持、会议邀约……这些邮件80%的内容都可以用标准模板回复,但手动复制粘贴依然要耗…...
正则表达式元字符详解:learn-regex-zh 进阶教程
正则表达式元字符详解:learn-regex-zh 进阶教程 【免费下载链接】learn-regex-zh :cn: 翻译: 学习正则表达式的简单方法 项目地址: https://gitcode.com/gh_mirrors/le/learn-regex-zh 正则表达式是一种强大的文本处理工具,而元字符是构建正则表达…...
CentOS 7.9 搭建 NTP 服务器
1、环境准备 1.1、CentOS 7.9系统 1.2、更换YUM源为本地或外网源 1.3、更换系统IP地址为静态地址 2、YUM 安装 NTP yum -y install ntp 3、配置NTP服务器 3.1、编辑 /etc/ntp.conf vi /etc/ntp.conf 3.2、如果你想同步外部 NTP 服务器,注释这四条内容 3.3、在下…...
EmonLibCM:嵌入式电能监测连续采样库解析
1. EmonLibCM:面向嵌入式电能监测的连续采样库深度解析EmonLibCM(Energy Monitoring Continuous Sampling Library)是一个专为资源受限嵌入式平台设计的开源电能监测库,其核心目标是实现高精度、低开销、免中断依赖的交流电参数连…...
CVA6开源社区贡献指南:如何参与这个活跃的RISC-V项目
CVA6开源社区贡献指南:如何参与这个活跃的RISC-V项目 【免费下载链接】cva6 The CORE-V CVA6 is a highly configurable, 6-stage RISC-V core for both application and embedded applications. Application class configurations are capable of booting Linux. …...
