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;

% 円柱の方向ベクトル

DC = pE - PS;

% 円柱の半径

r = 1.17;

% 計算判別式

デルタ = B^2 - 4*A*C;

% ソリューションの存在をチェック

if delta<0 points = 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 についても同じ)。

半円筒は、次の 2 つのパラメーターでパラメーター化できます。

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 に答える