CNC 코딩 작업 중입니다. x와 y 축을 동시에 움직여 선을 그릴 수 있습니다 (Bresenham의 알고리즘). 이제 세 번째 축을 추가하고 싶지만 (x0, y0, z0)에서 (x1, y1, z1)로 이동하는 방법을 알지 못합니다.3 스테퍼를 xyz 방향으로 이동 제어
그 목적을위한 알고리즘이 있습니까?
CNC 코딩 작업 중입니다. x와 y 축을 동시에 움직여 선을 그릴 수 있습니다 (Bresenham의 알고리즘). 이제 세 번째 축을 추가하고 싶지만 (x0, y0, z0)에서 (x1, y1, z1)로 이동하는 방법을 알지 못합니다.3 스테퍼를 xyz 방향으로 이동 제어
그 목적을위한 알고리즘이 있습니까?
브레멘 햄을 다시 사용하십시오.
DX = X1-X0; DY = Y1 - Y0; DZ = Y1 - Y0; ... DЪ = Ъ1 - Ъ0;
Dmax = max (| DX |, | DY |, | DX |, ..., | D |); 여기서 | x | = x의 모듈 계수
init X = X0; Y = Y0; Z = Z0; ... Ъ = Ъ0;
초기화하자. EX = 0; EY = 0; EZ = 0; .... EЪ = 0;
for i := 1 to Dmax do
EX = EX + |DX|;
if EX >= Dmax then
EX = EX -Dmax;
X = X + sign(DX);
MOTOR_X_ONE_STEP(DX > 0 ? FORWARD : BACKWARD);
end if
EY = EY + |DY|;
if EY >= Dmax then
EY = EY -Dmax;
Y = Y + sign(DY);
MOTOR_Y_ONE_STEP(DY > 0 ? FORWARD : BACKWARD);
end if
EZ = EZ + |DZ|;
if EZ >= Dmax then
EZ = EZ -Dmax;
Z = Z + sign(DZ);
MOTOR_Z_ONE_STEP(DZ > 0 ? FORWARD : BACKWARD);
end if
...
EЪ = EЪ + |DЪ|;
if EЪ >= Dmax then
EЪ = EЪ -Dmax;
Ъ = Ъ + sign(DЪ);
MOTOR_Ъ_ONE_STEP(DЪ > 0 ? FORWARD : BACKWARD);
end if
// Now we are in the point (X, Y, Z, ..., Ъ);
end for
여기서 기호 (X) = (X는 < 0)? -1 : 1;
당신이 갖고있는 축의 수와 상관없이, Bresenham의 알고리즘은 여전히 동일합니다.
축이 볼 수 있듯이 최대 | Dn | 각 단계가 증가합니다.
그건 그렇고. Dmax의 절반으로 모든 En 값을 초기화하면 라인을 더 멋지게 만들 수 있습니다.
EX = Dmax/2; EY = Dmax/2; EZ = Dmax/2; .... EЪ = Dmax/2;
3D Bresenham의 알고리즘을 검색 할 수 있습니까? –