⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 plot_line.c

📁 实现了直线插补程序,指明起点和终点即可.实际应用于XY绘图仪的画线并成功.在凌阳unSP IDE上编译通过.用C编写,可方便地移植.
💻 C
字号:
#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 + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -