Fix vector normalization in JD (#17938)
This commit is contained in:
		| @@ -2256,16 +2256,17 @@ bool Planner::_populate_block(block_t * const block, bool split_move, | ||||
|         { steps_dist_mm.x, steps_dist_mm.y, steps_dist_mm.z, steps_dist_mm.e } | ||||
|       #endif | ||||
|     ; | ||||
|     unit_vec *= inverse_millimeters; | ||||
|  | ||||
|     #if IS_CORE && HAS_JUNCTION_DEVIATION | ||||
|       /** | ||||
|        * On CoreXY the length of the vector [A,B] is SQRT(2) times the length of the head movement vector [X,Y]. | ||||
|        * So taking Z and E into account, we cannot scale to a unit vector with "inverse_millimeters". | ||||
|        * => normalize the complete junction vector | ||||
|        */ | ||||
|       normalize_junction_vector(unit_vec); | ||||
|     #endif | ||||
|     /** | ||||
|      * On CoreXY the length of the vector [A,B] is SQRT(2) times the length of the head movement vector [X,Y]. | ||||
|      * So taking Z and E into account, we cannot scale to a unit vector with "inverse_millimeters". | ||||
|      * => normalize the complete junction vector. | ||||
|      * Elsewise, when needed JD factors in the E component | ||||
|      */ | ||||
|     if (ENABLED(IS_CORE) || esteps > 0) | ||||
|       normalize_junction_vector(unit_vec);  // Normalize with XYZE components | ||||
|     else | ||||
|       unit_vec *= inverse_millimeters;      // Use pre-calculated (1 / SQRT(x^2 + y^2 + z^2)) | ||||
|  | ||||
|     // Skip first block or when previous_nominal_speed is used as a flag for homing and offset cycles. | ||||
|     if (moves_queued && !UNEAR_ZERO(previous_nominal_speed_sqr)) { | ||||
|   | ||||
		Reference in New Issue
	
	Block a user