gpt4 book ai didi

java - 如何使用三个点和两个 vector 计算平面方程?

转载 作者:行者123 更新时间:2023-11-30 07:21:26 24 4
gpt4 key购买 nike

我正在尝试根据两个 dicom 图像的数据计算两个平面方程,并从这两个平面方程得到一条交线。dicom 标签 ImagePositionPatient 具有三个坐标 x、y、z,标签 ImageOrientationPatient 具有两个 vector ,每个 vector 具有三个分量。如何利用这三个坐标和两个 vector 计算平面方程?

这是我的代码:

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;
}

最佳答案

根据类名,我猜 ImagePositionPatient 给出了平面上的一个点(例如 a),而 ImageOrientationPatient (例如 n) 给出正常值。 (我不知道这是正确的,但既然你告诉我它们是 3D vector ,这就是我的想法)。

那么你的平面方程由 dot(n, a) = dot(n, x) 给出,其中 x 是位置变量,n 已标准化。这给出了 Ax + By + Cz = D,这是笛卡尔方程。

关于java - 如何使用三个点和两个 vector 计算平面方程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37500971/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com