plot_line.c

来自「实现了直线插补程序,指明起点和终点即可.实际应用于XY绘图仪的画线并成功.在凌阳」· C语言 代码 · 共 137 行

C
137
字号
#include "plot_line.h"
extern float X0,Y0;//保存了当前坐标

//参数为起点和终点
void plot_line_chabu(float x1,float y1,float x2,float y2)
{
    unsigned int dx, dy, n, k, i; 
    int f; 		//f可正可负
	  go_to(x1,y1);
    dx=(unsigned int)_abs_((x2-x1)/0.0359);//0.0359为电机步进值
    dy=(unsigned int)_abs_((y2-y1)/0.0359);
    n=dx+dy;

    
    if (x2 >= x1) 
    {         k = y2 >= y1 ? 1: 4;     } 
    else 
    {         k = y2 >= y1 ? 2: 3;     } 
	
	f=0;
    for (i = 0, f = 0; i < n; i++) 
        if (f >= 0) 
            switch (k) { 
            case 1: 
    
                x_plus(1);
                f -= dy; 
                break; 
            case 2: 
        
                x_minus(1); 
                f -= dy; 
                break; 
            case 3: 
             
                x_minus(1); 
                f -= dy; 
                break; 
            case 4: 
          
                x_plus(1);
                f -= dy; 
                break; 
            } 
        else 
            switch (k) { 
            case 1: 
        
                y_plus(1);
                f += dx; 
                break; 
            case 2: 
        
                y_plus(1);
                f += dx; 
                break; 
            case 3: 
        
                y_minus(1); 
                f += dx;
                break; 
            case 4: 
           
                y_minus(1);  
                f += dx; 
                break; 
            } 
}


//========================================================
//只需指明终点,起点默认为当前坐标值
void plot_line_chabu_2(float x2,float y2)
{
    unsigned int dx, dy, n, k, i; 
    int f; 		//f可正可负
	float x1=X0;
	float y1=Y0;
	go_to(x1,y1);
    dx=(unsigned int)_abs_((x2-x1)/0.0359);
    dy=(unsigned int)_abs_((y2-y1)/0.0359); 
    n = dx + dy;
    //以起点为原点,则(dx,dy)则为终点坐标,在第一象限.
    if (x2 >= x1) 
    {         k = y2 >= y1 ? 1: 4;     } 
    else 
    {         k = y2 >= y1 ? 2: 3;     } 

    for (i = 0, f = 0; i < n; i++) 
        if (f >= 0) 
            switch (k) { 
            case 1: 
        
                x_plus(1);
                f -= dy; 
                break; 
            case 2: 
               
                x_minus(1); 
                f -= dy; 
                break; 
            case 3: 
             
                x_minus(1); 
                f -= dy; 
                break; 
            case 4: 
              
                x_plus(1);
                f -= dy; 
                break; 
            } 
        else 
            switch (k) { 
            case 1: 
               
                y_plus(1);
                f += dx; 
                break; 
            case 2: 
                
                y_plus(1);
                f += dx; 
                break; 
            case 3: 
              
                y_minus(1); 
                f += dx;
                break; 
            case 4: 
               
                y_minus(1);  
                f += dx; 
                break; 
            } 
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?