point_pluecker_line_to_hom_mat3dT_point_pluecker_line_to_hom_mat3dPointPlueckerLineToHomMat3dPointPlueckerLineToHomMat3dpoint_pluecker_line_to_hom_mat3d (Operator)

Name

point_pluecker_line_to_hom_mat3dT_point_pluecker_line_to_hom_mat3dPointPlueckerLineToHomMat3dPointPlueckerLineToHomMat3dpoint_pluecker_line_to_hom_mat3d — Berechnung einer Näherung für eine affine 3D-Transformation aus 3D-Punkt-zu-Gerade-Korrespondenzen.

Signatur

point_pluecker_line_to_hom_mat3d( : : TransformationType, PointX, PointY, PointZ, LineDirectionX, LineDirectionY, LineDirectionZ, LineMomentX, LineMomentY, LineMomentZ : HomMat3D)

Herror T_point_pluecker_line_to_hom_mat3d(const Htuple TransformationType, const Htuple PointX, const Htuple PointY, const Htuple PointZ, const Htuple LineDirectionX, const Htuple LineDirectionY, const Htuple LineDirectionZ, const Htuple LineMomentX, const Htuple LineMomentY, const Htuple LineMomentZ, Htuple* HomMat3D)

void PointPlueckerLineToHomMat3d(const HTuple& TransformationType, const HTuple& PointX, const HTuple& PointY, const HTuple& PointZ, const HTuple& LineDirectionX, const HTuple& LineDirectionY, const HTuple& LineDirectionZ, const HTuple& LineMomentX, const HTuple& LineMomentY, const HTuple& LineMomentZ, HTuple* HomMat3D)

void HHomMat3D::PointPlueckerLineToHomMat3d(const HString& TransformationType, const HTuple& PointX, const HTuple& PointY, const HTuple& PointZ, const HTuple& LineDirectionX, const HTuple& LineDirectionY, const HTuple& LineDirectionZ, const HTuple& LineMomentX, const HTuple& LineMomentY, const HTuple& LineMomentZ)

void HHomMat3D::PointPlueckerLineToHomMat3d(const char* TransformationType, const HTuple& PointX, const HTuple& PointY, const HTuple& PointZ, const HTuple& LineDirectionX, const HTuple& LineDirectionY, const HTuple& LineDirectionZ, const HTuple& LineMomentX, const HTuple& LineMomentY, const HTuple& LineMomentZ)

void HHomMat3D::PointPlueckerLineToHomMat3d(const wchar_t* TransformationType, const HTuple& PointX, const HTuple& PointY, const HTuple& PointZ, const HTuple& LineDirectionX, const HTuple& LineDirectionY, const HTuple& LineDirectionZ, const HTuple& LineMomentX, const HTuple& LineMomentY, const HTuple& LineMomentZ)   (Nur Windows)

static void HOperatorSet.PointPlueckerLineToHomMat3d(HTuple transformationType, HTuple pointX, HTuple pointY, HTuple pointZ, HTuple lineDirectionX, HTuple lineDirectionY, HTuple lineDirectionZ, HTuple lineMomentX, HTuple lineMomentY, HTuple lineMomentZ, out HTuple homMat3D)

void HHomMat3D.PointPlueckerLineToHomMat3d(string transformationType, HTuple pointX, HTuple pointY, HTuple pointZ, HTuple lineDirectionX, HTuple lineDirectionY, HTuple lineDirectionZ, HTuple lineMomentX, HTuple lineMomentY, HTuple lineMomentZ)

def point_pluecker_line_to_hom_mat3d(transformation_type: str, point_x: Sequence[float], point_y: Sequence[float], point_z: Sequence[float], line_direction_x: Sequence[Union[float, int]], line_direction_y: Sequence[Union[float, int]], line_direction_z: Sequence[Union[float, int]], line_moment_x: Sequence[Union[float, int]], line_moment_y: Sequence[Union[float, int]], line_moment_z: Sequence[Union[float, int]]) -> Sequence[float]

Beschreibung

point_pluecker_line_to_hom_mat3dpoint_pluecker_line_to_hom_mat3dPointPlueckerLineToHomMat3dPointPlueckerLineToHomMat3dPointPlueckerLineToHomMat3dpoint_pluecker_line_to_hom_mat3d berechnet eine Näherung für eine affine 3D-Transformation aus 3D-Punkt-zu-Gerade-Korrespondenzen und liefert sie in der homogenen Transformationsmatrix HomMat3DHomMat3DHomMat3DHomMat3DhomMat3Dhom_mat_3d zurück. Alle Eingabetupel müssen gleich viele Elemente enthalten und mindestens 3 Punkt-zu-Gerade-Korrespondenzen bestimmen. Dabei stehen Korrespondenzen an denselben Indexpositionen. Die Punkte werden durch (PointXPointXPointXPointXpointXpoint_x, PointYPointYPointYPointYpointYpoint_y, PointZPointZPointZPointZpointZpoint_z) spezifiziert. Die Geraden werden in Plückerkoordinaten (LineDirectionXLineDirectionXLineDirectionXLineDirectionXlineDirectionXline_direction_x, LineDirectionYLineDirectionYLineDirectionYLineDirectionYlineDirectionYline_direction_y, LineDirectionZLineDirectionZLineDirectionZLineDirectionZlineDirectionZline_direction_z) und (LineMomentXLineMomentXLineMomentXLineMomentXlineMomentXline_moment_x, LineMomentYLineMomentYLineMomentYLineMomentYlineMomentYline_moment_y, LineMomentZLineMomentZLineMomentZLineMomentZlineMomentZline_moment_z) gegeben. Für die Definition von Plückerkoordinaten siehe „Solution Guide III-C - 3D Vision“.

Der Typ der zu berechnenden 3D-Transformation wird mit TransformationTypeTransformationTypeTransformationTypeTransformationTypetransformationTypetransformation_type festgelegt. Für TransformationTypeTransformationTypeTransformationTypeTransformationTypetransformationTypetransformation_type = 'rigid'"rigid""rigid""rigid""rigid""rigid" wird eine starre 3D-Transformation (eine Rotation und eine Translation) berechnet. Dies ist der einzige Transformationstyp, der momentan unterstützt wird.

Es ist zu beachten, dass für die minimale Anzahl von 3 Korrespondenzen bis zu 8 gültige Lösungen möglich sind. In diesem Fall gibt point_pluecker_line_to_hom_mat3dpoint_pluecker_line_to_hom_mat3dPointPlueckerLineToHomMat3dPointPlueckerLineToHomMat3dPointPlueckerLineToHomMat3dpoint_pluecker_line_to_hom_mat3d eine willkürlich ausgewählte gültige Lösung zurück. Falls eine eindeutige Lösung erwünscht ist, sollten mindestens 4 Korrespondenzen übergeben werden. Weiterhin ist zu beachten, dass keine wohldefinierte Lösung existiert, falls alle Geraden parallel sind. In diesem Fall liefert point_pluecker_line_to_hom_mat3dpoint_pluecker_line_to_hom_mat3dPointPlueckerLineToHomMat3dPointPlueckerLineToHomMat3dPointPlueckerLineToHomMat3dpoint_pluecker_line_to_hom_mat3d eine Fehlermeldung zurück.

Die zurückgelieferte Transformation HomMat3DHomMat3DHomMat3DHomMat3DhomMat3Dhom_mat_3d minimiert die Summe der Quadrate der orthogonalen Abstände der mit HomMat3DHomMat3DHomMat3DHomMat3DhomMat3Dhom_mat_3d transformierten Punkte zu ihren korrespondierenden Geraden (siehe distance_point_pluecker_linedistance_point_pluecker_lineDistancePointPlueckerLineDistancePointPlueckerLineDistancePointPlueckerLinedistance_point_pluecker_line).

HomMat3DHomMat3DHomMat3DHomMat3DhomMat3Dhom_mat_3d kann direkt mit den Operatoren, die Daten mit affinen 3D-Transformationen transformieren, z.B. affine_trans_point_3daffine_trans_point_3dAffineTransPoint3dAffineTransPoint3dAffineTransPoint3daffine_trans_point_3d, verwendet werden. Um die Geraden in Plückerkoordinaten zu transformieren, kann der Operator dual_quat_trans_line_3ddual_quat_trans_line_3dDualQuatTransLine3dDualQuatTransLine3dDualQuatTransLine3ddual_quat_trans_line_3d verwendet werden. Dazu muss HomMat3DHomMat3DHomMat3DHomMat3DhomMat3Dhom_mat_3d mittels hom_mat3d_to_posehom_mat3d_to_poseHomMat3dToPoseHomMat3dToPoseHomMat3dToPosehom_mat3d_to_pose in eine Pose umgewandelt werden. Die Pose muss dann mit pose_invertpose_invertPoseInvertPoseInvertPoseInvertpose_invert invertiert werden und mittels pose_to_dual_quatpose_to_dual_quatPoseToDualQuatPoseToDualQuatPoseToDualQuatpose_to_dual_quat in eine duale Quaternion konvertiert werden.

Ausführungsinformationen

Parameter

TransformationTypeTransformationTypeTransformationTypeTransformationTypetransformationTypetransformation_type (input_control)  string HTuplestrHTupleHtuple (string) (string) (HString) (char*)

Typ der zu berechnenden Transformation.

Defaultwert: 'rigid' "rigid" "rigid" "rigid" "rigid" "rigid"

Werteliste: 'rigid'"rigid""rigid""rigid""rigid""rigid"

PointXPointXPointXPointXpointXpoint_x (input_control)  point3d.x-array HTupleSequence[float]HTupleHtuple (real) (double) (double) (double)

X-Koordinate der originalen Punkte.

PointYPointYPointYPointYpointYpoint_y (input_control)  point3d.y-array HTupleSequence[float]HTupleHtuple (real) (double) (double) (double)

Y-Koordinate der originalen Punkte.

PointZPointZPointZPointZpointZpoint_z (input_control)  point3d.z-array HTupleSequence[float]HTupleHtuple (real) (double) (double) (double)

Z-Koordinate der originalen Punkte.

LineDirectionXLineDirectionXLineDirectionXLineDirectionXlineDirectionXline_direction_x (input_control)  point3d.x-array HTupleSequence[Union[float, int]]HTupleHtuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong)

X-Komponente des Richtungsvektors der korrespondierenden Gerade.

LineDirectionYLineDirectionYLineDirectionYLineDirectionYlineDirectionYline_direction_y (input_control)  point3d.y-array HTupleSequence[Union[float, int]]HTupleHtuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong)

Y-Komponente des Richtungsvektors der korrespondierenden Gerade.

LineDirectionZLineDirectionZLineDirectionZLineDirectionZlineDirectionZline_direction_z (input_control)  point3d.z-array HTupleSequence[Union[float, int]]HTupleHtuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong)

Z-Komponente des Richtungsvektors der korrespondierenden Gerade.

LineMomentXLineMomentXLineMomentXLineMomentXlineMomentXline_moment_x (input_control)  point3d.x-array HTupleSequence[Union[float, int]]HTupleHtuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong)

X-Komponente des Momentenvektors der korrespondierenden Gerade.

LineMomentYLineMomentYLineMomentYLineMomentYlineMomentYline_moment_y (input_control)  point3d.y-array HTupleSequence[Union[float, int]]HTupleHtuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong)

Y-Komponente des Momentenvektors der korrespondierenden Gerade.

LineMomentZLineMomentZLineMomentZLineMomentZlineMomentZline_moment_z (input_control)  point3d.z-array HTupleSequence[Union[float, int]]HTupleHtuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong)

Z-Komponente des Momentenvektors der korrespondierenden Gerade.

HomMat3DHomMat3DHomMat3DHomMat3DhomMat3Dhom_mat_3d (output_control)  hom_mat3d HHomMat3D, HTupleSequence[float]HTupleHtuple (real) (double) (double) (double)

Ausgabe-Transformationsmatrix.

Beispiel (HDevelop)

* In this example, we assume that correspondences between points
* (PX, PY, PZ) and Plücker lines (LX, LY, LZ) - (MX, MY, MZ) have
* already been computed.
point_pluecker_line_to_hom_mat3d ('rigid', PX, PY, PZ, LX, LY, LZ, \
                                  MX, MY, MZ, HomMat3D)
hom_mat3d_to_pose (HomMat3D, Pose)
* Compute the residual errors in 3D space, i.e., the distance of the
* points (PX, PY, PZ) transformed by HomMat3D from the lines.
affine_trans_point_3d (HomMat3D, PX, PY, PZ, TPX, TPY, TPZ)
distance_point_pluecker_line (TPX, TPY, TPZ, LX, LY, LZ, \
                              MX, MY, MZ, D)
* The same distance can also be computed by transforming the lines
* instead of the points.  Here, the inverse pose must be used.
pose_invert (Pose, PoseInv)
pose_to_dual_quat (PoseInv, DualQuat)
dual_quat_trans_line_3d (DualQuat, 'moment', LX, LY, LZ, MX, MY, MZ, \
                         TLX, TLY, TLZ, TMX, TMY, TMZ)
distance_point_pluecker_line (PX, PY, PZ, TLX, TLY, TLZ, \
                              TMX, TMY, TMZ, D)

Vorgänger

get_line_of_sightget_line_of_sightGetLineOfSightGetLineOfSightGetLineOfSightget_line_of_sight, points_to_pluecker_linepoints_to_pluecker_linePointsToPlueckerLinePointsToPlueckerLinePointsToPlueckerLinepoints_to_pluecker_line, point_direction_to_pluecker_linepoint_direction_to_pluecker_linePointDirectionToPlueckerLinePointDirectionToPlueckerLinePointDirectionToPlueckerLinepoint_direction_to_pluecker_line

Nachfolger

hom_mat3d_to_posehom_mat3d_to_poseHomMat3dToPoseHomMat3dToPoseHomMat3dToPosehom_mat3d_to_pose, affine_trans_point_3daffine_trans_point_3dAffineTransPoint3dAffineTransPoint3dAffineTransPoint3daffine_trans_point_3d, pose_invertpose_invertPoseInvertPoseInvertPoseInvertpose_invert, pose_to_dual_quatpose_to_dual_quatPoseToDualQuatPoseToDualQuatPoseToDualQuatpose_to_dual_quat, dual_quat_trans_line_3ddual_quat_trans_line_3dDualQuatTransLine3dDualQuatTransLine3dDualQuatTransLine3ddual_quat_trans_line_3d, distance_point_pluecker_linedistance_point_pluecker_lineDistancePointPlueckerLineDistancePointPlueckerLineDistancePointPlueckerLinedistance_point_pluecker_line

Siehe auch

vector_to_hom_mat3dvector_to_hom_mat3dVectorToHomMat3dVectorToHomMat3dVectorToHomMat3dvector_to_hom_mat3d

Modul

Foundation