zoukankan      html  css  js  c++  java
  • c++ 算法 栅格中两点之间连线

    屏幕划线,通过平面坐标系实现,基本组成是一个一个的点,起点为A,终点为B

    本文的算法,可以实现平面栅格中,指定的A,B两点之间进行连线(代码中仅打印了两点间需要画出的坐标点)

    #include <iostream>
    #include <algorithm>    
    using namespace std;
    
    void paint(int,int);
    void paint(int i,int j){   //画出点位 
        cout<<i<<",,"<<j<<endl;
    }
    int main () {
        
        int A[] = {7,2};//起点 
        int B[]={7,2};//终点 
        
        int Ax=-1,Ay=-1,Bx=-1,By=-1;
        Ax=A[0];
        Ay=A[1];
        Bx=B[0];
        By=B[1];
        int width,height,left=-1,times=-1,shu=-1;
        width=abs(Ax-Bx)+1;
        height=abs(Ay-By)+1;
        if(width>height){
            shu=0;
            times=width/height;
            cout<<"0times"<<times<<endl;
            left=width%height;
            cout<<"0left"<<left<<endl;
        }else if(width<height){
            shu=1;
            times=height/width;
            cout<<"1times"<<times<<endl; 
            left=height%width;
            cout<<"1left"<<left<<endl;
        }else{
            shu=2;
        }
        if(Ax>Bx){
            if(Ay>By){
                if(shu==2){
                    for(int i=0;i<height;i++){
                        paint(Bx+i,By+i);
                    }
                }else if(shu==1){
                    for(int i=0;i<width;i++){
                        if(left>0){
                            for(int j=0;j<times+1;j++){
                                
                                paint(Bx,By);
                                By+=1;
                            }
                            Bx+=1;
                        }else{
                            for(int j=0;j<times;j++){
                                
                                paint(Bx,By);
                                By+=1;
                            }
                            Bx+=1;
                        }
                        left-=1;
                    }
                }else{
                    for(int i=0;i<height;i++){
                        if(left>0){
                            for(int i=0;i<times+1;i++){
                                
                                paint(Bx,By);
                                Bx+=1;
                            }
                            By+=1;
                        }else{
                            for(int j=0;j<times;j++){
                                
                                paint(Bx,By);
                                Bx+=1;
                            }
                            By+=1;
                        }
                        left-=1;
                    }
                }
            }else if(Ay<By){
                if(shu==2){
                    for(int i=0;i<height;i++){
                        paint(Bx+i,By-i);
                    }
                }else if(shu==1){
                    for(int i=0;i<width;i++){
                        if(left>0){
                            for(int j=0;j<times+1;j++){
                                
                                paint(Bx,By);
                                By-=1;
                            }
                            Bx+=1;
                        }else{
                            for(int j=0;j<times;j++){
                                
                                paint(Bx,By);
                                cout<<"dede"<<endl;
                                By-=1;
                            }
                            Bx+=1;
                        }
                        left-=1;
                    }
                }else{
                    for(int i=0;i<height;i++){
                        if(left>0){
                            for(int i=0;i<times+1;i++){
                                
                                paint(Bx,By);
                                Bx+=1;
                            }
                            By-=1;
                        }else{
                            for(int j=0;j<times;j++){
                                
                                paint(Bx,By);
                                Bx+=1;
                            }
                            By-=1;
                        }
                        left-=1;
                    }
                }
            }else{
                for(int i=0;i<width;i++){
                    paint(Bx+i,By);
                }
            }
        }else if(Ax<Bx){
            if(Ay>By){
                if(shu==2){
                    for(int i=0;i<height;i++){
                        paint(Ax+i,Ay-i);
                    }
                }else if(shu==1){
                    for(int i=0;i<width;i++){
                        if(left>0){
                            for(int j=0;j<times+1;j++){
                                
                                paint(Ax,Ay);
                                Ay-=1;
                            }
                            Ax+=1;
                        }else{
                            for(int j=0;j<times;j++){
                                
                                paint(Ax,Ay);
                                Ay-=1;
                            }
                            Ax+=1;
                        }
                        left-=1;
                    }
                }else{
                    for(int i=0;i<height;i++){
                        if(left>0){
                            for(int i=0;i<times+1;i++){
                                
                                paint(Ax,Ay);
                                Ax+=1;
                            }
                            Ay-=1;
                        }else{
                            for(int j=0;j<times;j++){
                                
                                paint(Ax,Ay);
                                Ax+=1;
                            }
                            Ay-=1;
                        }
                        left-=1;
                    }
                }
            }else if(Ay<By){
                if(shu==2){
                    for(int i=0;i<height;i++){
                        paint(Ax+i,Ay+i);
                    }
                }else if(shu==1){
                    for(int i=0;i<width;i++){
                        if(left>0){
                            for(int j=0;j<times+1;j++){
                                paint(Ax,Ay);
                                Ay+=1;
                            }
                            Ax+=1;
                        }else{
                            for(int k=0;k<times;k++){
                                
                                paint(Ax,Ay);
                                Ay+=1;
                            }
                            Ax+=1;
                        }
                        left-=1;
                    }
                }else{
                    for(int i=0;i<height;i++){
                        if(left>0){
                            for(int i=0;i<times+1;i++){
                                
                                paint(Ax,Ay);
                                Ax+=1;
                            }
                            Ay+=1;
                        }else{
                            for(int j=0;j<times;j++){
                                
                                paint(Ax,Ay);
                                Ax+=1;
                            }
                            Ay+=1;
                        }
                        left-=1;
                    }
                }
            }else{
                for(int i=0;i<width;i++){
                    paint(Ax+i,Ay);
                }
            }
        }else{
            if(Ay>By){
                for(int i=0;i<height;i++){
                    paint(Bx,By+i);
                }
            }else if(Ay<By){
                for(int i=0;i<height;i++){
                    paint(Ax,Ay+i);
                }
            }else{
                for(int i=0;i<width;i++){
                    paint(Ax,Ay);
                }
            }
        }
        return 0;
    }

  • 相关阅读:
    关于JS中变量提升的规则和原理的一点理解(二)
    JS 引擎的执行机制
    关于遍历对象的属性的一点新认识,如何只遍历对象自身的属性
    【转】 CSS十问——好奇心+刨根问底=CSSer
    【转】彻底理解js中this的指向,不必硬背。
    【转】 Git——如何将本地项目提交至远程仓库
    博客园的第一篇文章
    《深度学习之kaggle》:六、没有预训练的YOLO5X训练方式小改,准确率小幅提升
    《深度学习之kaggle》:五、没有预训练的YOLO5X训练完毕
    Webdriver如何解决页面元素过期:org.openqa.selenium.StaleElementReferenceException: Element not found in the cache
  • 原文地址:https://www.cnblogs.com/sea-stream/p/9841010.html
Copyright © 2011-2022 走看看