2016-05-28 5 views
1

Я пытаюсь вычислить два уравнения плоскости из данных двух двумерных изображений и получить линию пересечения из этих двух уравнений плоскости. Тег dicom ImagePositionPatient имеет три координаты x, y, z и тег ImageOrientationPatient имеет два вектора с тремя компонентами. Как уравнение плоскости можно вычислить с использованием этих трех координат и двух векторов?Как вычислить уравнение плоскости с помощью трех точек и двух векторов?

Это мой код:

public void ShowLocalizerLine(View v) 
{ 
    //Getting The Values 
    InfoOfFirst(); //This gets the img position and orientation of src img 
    InfoOfSecond(); //This gets the img position and orientation of dst img 
    String[] src_position_array = new String[3]; 
    src_position_array = firstimg_position.split("\\\\"); 
    Src_Position_Xo = Float.parseFloat(src_position_array[0]); 
    Src_Position_Yo = Float.parseFloat(src_position_array[1]); 
    Src_Position_Zo = Float.parseFloat(src_position_array[2]); 

    String[] src_orientation_array = new String[6]; 
    src_orientation_array = firstimg_orientation.split("\\\\"); 
    Src_Orientation_Vector1_A = Float.parseFloat(src_orientation_array[0]); 
    Src_Orientation_Vector1_B = Float.parseFloat(src_orientation_array[1]); 
    Src_Orientation_Vector1_C = Float.parseFloat(src_orientation_array[2]); 
    Src_Orientation_Vector2_D = Float.parseFloat(src_orientation_array[3]); 
    Src_Orientation_Vector2_E = Float.parseFloat(src_orientation_array[4]); 
    Src_Orientation_Vector2_F = Float.parseFloat(src_orientation_array[5]); 

    String[] dst_position_array = new String[3]; 
    dst_position_array = secimg_position.split("\\\\"); 
    Dst_Position_Xo = Float.parseFloat(dst_position_array[0]); 
    Dst_Position_Yo = Float.parseFloat(dst_position_array[1]); 
    Dst_Position_Zo = Float.parseFloat(dst_position_array[2]); 

    String[] dst_orientation_array = new String[6]; 
    dst_orientation_array = secimg_orientation.split("\\\\"); 
    Dst_Orientation_Vector1_A = Float.parseFloat(dst_orientation_array[0]); 
    Dst_Orientation_Vector1_B = Float.parseFloat(dst_orientation_array[1]); 
    Dst_Orientation_Vector1_C = Float.parseFloat(dst_orientation_array[2]); 
    Dst_Orientation_Vector2_D = Float.parseFloat(dst_orientation_array[3]); 
    Dst_Orientation_Vector2_E = Float.parseFloat(dst_orientation_array[4]); 
    Dst_Orientation_Vector2_F = Float.parseFloat(dst_orientation_array[5]); 

    //Calculations 
    float dst_nrm_dircos_x = Dst_Orientation_Vector1_B*Dst_Orientation_Vector2_F - Dst_Orientation_Vector1_C*Dst_Orientation_Vector2_E; 
    float dst_nrm_dircos_y = Dst_Orientation_Vector1_C*Dst_Orientation_Vector2_D - Dst_Orientation_Vector1_A*Dst_Orientation_Vector2_F; 
    float dst_nrm_dircos_z = Dst_Orientation_Vector1_A*Dst_Orientation_Vector2_E - Dst_Orientation_Vector1_B*Dst_Orientation_Vector2_D; 

    float src_pos_x = Src_Position_Xo - Dst_Position_Xo; 
    float src_pos_y = Src_Position_Yo - Dst_Position_Yo; 
    float src_pos_z = Src_Position_Zo - Dst_Position_Zo; 
    float dst_pos_x = Dst_Orientation_Vector1_A*src_pos_x + Dst_Orientation_Vector1_B*src_pos_y + Dst_Orientation_Vector1_C*src_pos_z; 
    float dst_pos_y = Dst_Orientation_Vector2_D*src_pos_x + Dst_Orientation_Vector2_E*src_pos_y + Dst_Orientation_Vector2_F*src_pos_z; 
    float dst_pos_z = dst_nrm_dircos_x*src_pos_x + dst_nrm_dircos_y*src_pos_y + dst_nrm_dircos_z*src_pos_z;  
} 
+0

Действительно ли это вопрос программирования или он больше подходит для Math.SE? – paisanco

+0

@paisanco это связано с математикой, но задача должна быть выполнена в приложении Android (java) –

+0

вам нужны только два вектора для вычисления уравнения плоскости - его нормальное положение и положение; какие 5 векторов вы представили? имеют ли они имена переменных, которые намекают на их назначение? –

ответ

1

Из имен классов, которые я предполагаю ImagePositionPatient дает точку (скажем ) на плоскости и ImageOrientationPatient (скажем п) дает нормальный. (Я бы не знаю это правильно, но поскольку вы сказали мне, что это 3D-векторы, это то, что я имею в виду).

Тогда ваш самолет уравнение задается dot(n, a) = dot(n, x), где х является переменной и положение п нормирована. Это дает Ax + By + Cz = D, являющееся декартовым уравнением.

+0

Благодарим за помощь :) –

+0

@Android_Learner не проблема –