0

我有以下几点制作半圆柱。

p1 = [7.9463,-1.0200,-9.7586];  % start points(boundary)
pS = [9.1163,-1.0200,-9.5886];  % start points (middle)
p2 = [10.2863,-1.0200,-9.7586]; % start points(boundary)


p3 = [7.9463,-1.78,-9.7586]; % End points(boundary)
pE = [9.1163,-1.78,-9.5886]; % End points (middle)
p4 = [10.2863,-1.78,-9.7586]; % End points (boundary)

r=1.17

and line 
line_=[8,-1,-8,9,-8,-10]; %[P0,P1];

%%%%%%% 部分采用的代码来自

在此处输入链接描述

% Starting point of the line
l0 = line_(1:3)';

% Direction vector of the line
dl = line_(4:6)'-line_(1:3)';

% 气缸起始位置

c0 = pS;

% 圆柱体的方向矢量

直流 = pE - PS;

% 圆柱半径

r =1.17;

% 计算判别式

增量 = B^2 - 4*A*C;

% 检查解决方案是否存在

如果 delta<0 点 = zeros(0, 3); 返回; 结尾

在此处输入图像描述

我怎样才能得到线和半圆柱的交点。

我正在寻找我的问题的 matlab 代码。或链接

应该是什么

% 二阶方程的系数

A = ?????????? B = ????????? C = ??????????

请提供任何指导。

4

1 回答 1

1

从matlab中抽象出来,看起来很容易找到任何半圆柱与任何线段的交点......

线段可以参数化为

x_L = x_L0+(x_L1-x_L0)*t,其中 t 在 0 和 1 之间变化,x_L0 和 x_L1 - 端点(y、z 相同)。

半圆柱体可以用两个参数进行参数化:

z=z0+(z1-z0)*u, u 在 0 和 1 之间变化 (x-x0)^2+(y-y0)^2 = r^2, y>0 (x0,y0 - 半圆的中心, z0,z1 - 范围,假设圆位于 x,y 平面)

将 x 和 y 代入半圆方程得到 t 的平方方程: (x_L0+(x_L1-x_L0)*t-x0)^2+(y_L0+(y_L1-y_L0)*t-y0)^2 = r^2 因此:

    A = (x_L1-x_L0)^2+(y_L1-y_L0)^2;
    B = 2*(x_L0-x0)*(x_L1-x_L0)+2(y_L0-y0)*(y_L1-y_L0);
    C = (x_L0-x0)^2+(y_L1-y_L0)^2-r^2;
    D = B^2-4*A*C;
    if D <0
    %no solution
    else
    t(1) = (-B+sqrt(D))/2/A;
    t(2) = (-B-sqrt(D))/2/A;
    sol=nan(3,2);
    for i=1:2
    if t(i)>0 &&... 
t(i)<1 &&... 
y_L0+(y_L1-y_L0)*t(i)>0 &&... 
z_L0+(z_L1-z_L0)*t(i)>z0 &&... 
z_L0+(z_L1-z_L0)*t(i)<z1  
%solution is within interval of parametrization and y > 0, and z_intersectio nis between z0 and z1
    sol(1,i)=x_L0+(x_L1-x_L0)*t(i);
    sol(2,i)=y_L0+(y_L1-y_L0)*t(i);
    sol(3,i)=z_L0+(z_L1-z_L0)*t(i);
    end;
    end;
于 2013-01-04T22:32:34.853 回答