空间直线和三维物体之间的交线相关问题
1.如何求空间直线在某一平面上的投影直线方程
https://zhidao.baidu.com/question/631349383625570644.html
2. 知道平面一点和平面法向量如何求平面方程
https://zhidao.baidu.com/question/1176936423777863579.html
3 求空间直线和平面的交点
https://zhidao.baidu.com/question/1547238640427961907.html
4 已知空间两点,求直线方程
5.求解空间直线和圆柱的交点的两种方法
(1)先求空间直线与x-y平面的交点,然后求空间直线在x-y平面上的投影的方向向量,由交点和投影直线的方向向量可确定投影直线方程,进而计算直线和圆柱在x-y平面上的投影的2个交点,获得两个交点的x,y坐标,再将x,y带入直线方程求解出z,也就求解出了2个交点(圆柱的圆心已知,且平行于z轴)
%% 定义直线方程
syms x y z
% RayEqn = @(x,y,z)((x - SourcePosition(1))/(ChannelPosition(1) - SourcePosition(1)) - ...
% (y - SourcePosition(2))/(ChannelPosition(2) - SourcePosition(2)) - ...
% (z - SourcePosition(3))/(ChannelPosition(3) - SourcePosition(3)));CylinderEqn = (x - CylinderPosion(1)).^2 + (y - CylinderPosion(2)).^2 - R.^2 == 0;%% 求直线在x-y平面的投影直线方程
%直线和x-y平面的交点也是投影直线的交点,知道交点,知道投影直线的方向向量,就可以求出投影直线方程%求直线和x-y平面的交点
eqns = [...(x - SourcePosition(1))/(ChannelPosition(1) - SourcePosition(1)) - (y - SourcePosition(2))/(ChannelPosition(2) - SourcePosition(2)) ==0, ...(y - SourcePosition(2))/(ChannelPosition(2) - SourcePosition(2)) - (z - SourcePosition(3))/(ChannelPosition(3) - SourcePosition(3)) ==0, ...(x - 0) * 0 + (y - 0)*0 + (z - 0) * 1 == 0]; %平面方程,知道平面内一点以及平面的法向量
vars = [x y z];
[LinePlaneX ,LinePlaneY,LinePlaneZ] = vpasolve(eqns,vars);
LinePlaneJunction = [double(LinePlaneX) ,double(LinePlaneY),double(LinePlaneZ)];%直线的方向向量
v1 = SourcePosition - ChannelPosition;
%x-y平面法向量
n1 = [0,0,1];
%直线与其投影所在平面的法向量为
n2 = cross(v1 ,n1);
%直线的投影的方向向量为
v2 = cross(n1,n2);
if(v2(3) ~= 0)fprintf("FindLwLb : wrong ,the projection of the line is not in the x-y plane\n");
end
PrjRayEqn = (x - LinePlaneJunction(1)) / v2(1) - (y - LinePlaneJunction(2))/v2(2) == 0;
% PrjRayEqn = (x - LinePlaneJunction(1)) / v2(1) - (y - LinePlaneJunction(2))/v2(2) - (z - LinePlaneJunction(3))/v2(3) == 0;%% 求投影直线和x-y平面上圆面的交点坐标
eqns2 = [ PrjRayEqn,CylinderEqn];
vars = [x y];
[CylindeRayJunctionX ,CylindeRayJunctionY]= solve(eqns2,vars,[-250,250;-250,250 ;-250,250]); CylindeRayJunctionX = double(CylindeRayJunctionX);
CylindeRayJunctionY = double(CylindeRayJunctionY);if(isempty(CylindeRayJunctionX) || length(CylindeRayJunctionX) == 1|| ...isempty(CylindeRayJunctionY) || length(CylindeRayJunctionY) == 1)Distance = 0;
elseif(length(CylindeRayJunctionX) == 2 && length(CylindeRayJunctionY) == 2)RayEqn = (CylindeRayJunctionX(1) - SourcePosition(1))/(ChannelPosition(1) - SourcePosition(1)) - ...(CylindeRayJunctionY(1) - SourcePosition(2))/(ChannelPosition(2) - SourcePosition(2)) - ...(z - SourcePosition(3))/(ChannelPosition(3) - SourcePosition(3)) == 0;CylindeRayJunctionZ1 = vpasolve(RayEqn,z); point1 = [CylindeRayJunctionX(1),CylindeRayJunctionY(1), CylindeRayJunctionZ1];RayEqn2 = (CylindeRayJunctionX(2) - SourcePosition(1))/(ChannelPosition(1) - SourcePosition(1)) - ...(CylindeRayJunctionY(2) - SourcePosition(2))/(ChannelPosition(2) - SourcePosition(2)) - ...(z - SourcePosition(3))/(ChannelPosition(3) - SourcePosition(3)) == 0;CylindeRayJunctionZ2 = vpasolve(RayEqn2,z); point2 = [CylindeRayJunctionX(2),CylindeRayJunctionY(2), CylindeRayJunctionZ2];Distance = sqrt(sum((double(point1) -double( point2)) .^2));
elsefprintf("FindLwLb :wrong Distance \n");
end
(2).直接由已知的直线的方程,拆分成x和y的一个方程以及y和z的一个方程,联力圆柱的一个切面方程,三个方程,求解3个未知数,直接求出两个交点
%% 定义直线方程
syms x y z%% 求直线和圆柱的交点
%直线和x-y平面的交点也是投影直线的交点,知道交点,知道投影直线的方向向量,就可以求出投影直线方程
%求直线和x-y平面的交点
eqns = [...(x - SourcePosition(1))/(ChannelPosition(1) - SourcePosition(1)) - (y - SourcePosition(2))/(ChannelPosition(2) - SourcePosition(2)) ==0, ...(y - SourcePosition(2))/(ChannelPosition(2) - SourcePosition(2)) - (z - SourcePosition(3))/(ChannelPosition(3) - SourcePosition(3)) ==0, ...(x - CylinderPosion(1)).^2 + (y - CylinderPosion(2)).^2 - R.^2 == 0 ...]; %平面方程,知道平面内一点以及平面的法向量
vars = [x y z];
[CylindeRayJunctionX ,CylindeRayJunctionY,CylindeRayJunctionZ] = vpasolve(eqns,vars,[-250,250;-250,250 ;-250,250]); % % % % eqn1 = (x - SourcePosition(1))/(ChannelPosition(1) - SourcePosition(1)) - (y - SourcePosition(2))/(ChannelPosition(2) - SourcePosition(2));
% % % % eqn2 = (y - SourcePosition(2))/(ChannelPosition(2) - SourcePosition(2)) - (z - SourcePosition(3))/(ChannelPosition(3) - SourcePosition(3));
% % % % eqn3 = (x - CylinderPosion(1)).^2 + (y - CylinderPosion(2)).^2 - R.^2 ;
% % % % [a,b,c] = solve(eqn1 ==0 ,eqn2 == 0, eqn3 == 0,[x,y,z]);if(isempty(CylindeRayJunctionX) || length(CylindeRayJunctionX) == 1|| ...isempty(CylindeRayJunctionY) || length(CylindeRayJunctionY) == 1|| ...isempty(CylindeRayJunctionZ) || length(CylindeRayJunctionZ) == 1)Distance = 0;
elseif(length(CylindeRayJunctionX) == 2 &&...length(CylindeRayJunctionY) == 2 && ...length(CylindeRayJunctionZ) == 2)point1 = [double(CylindeRayJunctionX(1)),double(CylindeRayJunctionY(1)),double(CylindeRayJunctionZ(1))];point2 = [double(CylindeRayJunctionX(2)),double(CylindeRayJunctionY(2)),double(CylindeRayJunctionZ(2))];Distance = sqrt(sum((point1 - point2) .^2));
elsefprintf("FindLwLb :wrong Distance \n");
end
6 solve fslove 等matlab解方程函数,求解结果出现虚数
可能原因是没有限定解空间的范围
7 已知两个向量,求向量的夹角
8 已知2个点,求向量
空间直线和三维物体之间的交线相关问题相关推荐
- 机械臂控制软件,上位机软件 此机器人上位软件。 运动采用通用G代码指令编程,具有G5三维的空间圆弧插补,空间直线插补功能
机械臂控制软件,上位机软件 此机器人上位软件. 运动采用通用G代码指令编程,具有G5三维的空间圆弧插补,空间直线插补功能,子程序编程功能,逻辑判断语句功能,示教编程功能(支持手柄),变量位置编程功能, ...
- 【C++】【Ctrl+CV即可食用】三维点拟合空间直线
前景概述 网上三维点拟合空间直线的代码很多 大多数都是python或者matlab 这里贴一个C++的代码 原目的是拟合出直线之后任取两个点手动计算一下斜率 数学原理 最小二乘拟合直线方程: x−x0 ...
- matlab中如何转动三维图_MATLAB小技巧之:绕任意空间轴旋转三维图形
x=1:0.1:10; y=sin(x); c=cosd(15); s=sind(15); X=x*c-y*s; Y=x*s+y*c; plot(x,y) hold on plot(X,Y) 这就是新 ...
- 解析几何:第四章 空间中的直线与平面(1)空间直线的方向、平面方程、空间直线方程
§1 空间直线的方向 1. 方向角 通过原点O的直线OM与三条坐标轴的夹角α,β,γ称为该直线的方向角 即: α=∠MOX,β=∠MOY,γ=∠MOZ 2. 方向余弦 直线方向角的余弦称为方向余弦. ...
- pcl::lineToLineSegment() 计算空间直线的交点和最小公垂线
对于两空间直线来说,计算交点和最小公垂线是一码事,交点即最小公垂线两个垂足的中心.PCL中源码中包含计算空间直线最小公垂线的函数 PCL_EXPORTS void pcl::lineToLineSeg ...
- 0804空间直线及其方程-向量代数与空间解析几何
文章目录 1 空间直线方程 1.1 空间直线的一般方程 1.2 空间直线的对称式方程 1.3 空间直线的参数方程 1.4 空间直线的两点式方程 3 两直线的夹角 4 直线与平面的夹角 4.1 定义 4 ...
- 【转载】空间直线同任意形状椭球交点
空间直线同空间中三维椭球相交,其交点即为空间直线方程同椭球方程的解,对于空间直线方程,只要知道两点空间坐标即可,而欧拉角不为零的三维椭球方程则较难描述,但可以考虑对椭球进行变换,使其欧拉角为零,进而转 ...
- 8.4 向量应用(二)——空间直线
本篇内容接上篇,还是关于向量应用的内容.没有废话,直接来. 空间直线方程 (一)点向式方程(对称式方程) 从名字上看,点向式两个关键,一个是点,一个是向,点是直线上一点,向是直线的方向,或者是和直线方 ...
- 【高等数学】通过俩条空间直线求得公垂线的求法
1. 先利用俩空间直线的方向向量通过向量积求得其公垂线的方向向量 2. 求出过空间直线L1及公垂线的平面 因为是过公垂线的平面,所以它与直线L1的方向向量垂直,与公垂线的方向向量也垂直. 即利用向量积 ...
最新文章
- HDU-1268 找新朋友 (素数筛选)
- 南方电网两栖机器人_探访国内最大5G智能电网应用区:5G机器人已替代人工巡检...
- iphone桌面上的圆圈怎么设置_苹果手机桌面上找不到便签记事本怎么办?有办法添加吗...
- 使用Fiddler为满足某些特定格式的网络请求返回mock响应
- 51单片机流水灯用c语言,51单片机之流水灯(C语言和汇编两个版本)
- 为什么诸多顶级期刊论文中的观点也不靠谱?
- CoffeeScript、TypeScript 、 JavaScript 之间
- 深入理解jvm虚拟机笔记
- STM32H7+USB3300+SD作为U盘速度慢的问题
- 27年台湾珍珠鲜奶茶品牌Sharetea将引进上海
- Domino M-Series 设置说明
- P2690 [USACO04NOV]Apple Catching G
- 【FLink】Assigned key must not be null
- 真无线蓝牙耳机什么便宜好用?五款口碑好的真无线蓝牙耳机
- 期望、方差、协方差、协方差函数、期望函数、方差函数
- MAC添加受信任证书
- java获取PDF页面长宽
- 江苏计算机一级考试模拟试题,2016年江苏计算机一级考试试题.doc
- matlab自定义函数实现灰度图像均值滤波
- C语言-小明小强扔石头