屏幕划线,通过平面坐标系实现,基本组成是一个一个的点,起点为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;
}

c++ 算法 栅格中两点之间连线的更多相关文章

  1. 武汉科技大学ACM :1006: 零起点学算法25——求两点之间的距离

    Problem Description 输入平面坐标系中2点的坐标,输出它们之间的距离 Input 输入4个浮点数x1 y1 x2 y2,分别是点(x1,y1) (x2,y2)的坐标(多组数据) Ou ...

  2. Floyd算法——计算图中任意两点之间的最短路径

    百度百科定义:传送门 一.floyd算法 说实话这个算法是用来求多源最短路径的算法. 算法原理: 1,从任意一条单边路径开始.所有两点之间的距离是边的权,如果两点之间没有边相连,则权为无穷大. 2,对 ...

  3. Geotools求shapefile路网中任意两点之间最短路径的距离

    前言:之前在博问求助过这个问题.经过几天的思考,算是解决了(但仍有不足),另一方面对Geotools不是很熟,有些描述可能不正确,希望大家批评指正. 问题:作为一个新手,我并没有发现Geotools中 ...

  4. 2D和3D空间中计算两点之间的距离

    自己在做游戏的忘记了Unity帮我们提供计算两点之间的距离,在百度搜索了下. 原来有一个公式自己就写了一个方法O(∩_∩)O~,到僵尸到达某一个点之后就向另一个奔跑过去 /// <summary ...

  5. Dijkstra 算法,用于对有权图进行搜索,找出图中两点的最短距离

    Dijkstra 算法,用于对有权图进行搜索,找出图中两点的最短距离,既不是DFS搜索,也不是BFS搜索. 把Dijkstra 算法应用于无权图,或者所有边的权都相等的图,Dijkstra 算法等同于 ...

  6. ArcEngine中合并断开的线要素(根据几何判断)

    在上一篇ArcEngine环境下合并断开的线要素(根据属性)随笔中介绍了如何通过shp文件属性表中相同的属性字段进行线要素的合并.今天刚把通过几何条件判断的方式连接断开的线要素的ArcGIS 插件完成 ...

  7. C#面向对象思想计算两点之间距离

    题目为计算两点之间距离. 面向过程的思维方式,两点的横坐标之差,纵坐标之差,平方求和,再开跟,得到两点之间距离. using System; using System.Collections.Gene ...

  8. [CareerCup] 4.2 Route between Two Nodes in Directed Graph 有向图中两点的路径

    4.2 Given a directed graph, design an algorithm to find out whether there is a route between two nod ...

  9. (转)c# math 计算两点之间的角度公式

    计算两点之间的角度公式是: 假设点一(X1,Y1),点二(X2,Y2) double angleOfLine = Math.Atan2((Y2 - Y1), (X2 - X2)) * 180 / Ma ...

随机推荐

  1. [LintCode] 394. Coins in a Line_ Medium tag:Dynamic Programming_博弈

    Description There are n coins in a line. Two players take turns to take one or two coins from right ...

  2. Pycharm上python3运行unittest无法生成测试报告

    原文地址https://www.cnblogs.com/yoyoketang/p/7523409.html 前言 经常有人在群里反馈,明明代码一样的啊,为什么别人的能出报告,我的出不了报告:为什么别人 ...

  3. linq to sql 左联接出错,未将对象引用设置到实例

    var result = from a in model join b in orderDetailModel on a.FoodMenuID equals b.FoodMenuID into g f ...

  4. sublime Text3在mac下设置窗口实现多标签

    打开Sublime Text3,点击左上角的Sublime Text3按钮,然后选择“Preferences”里面的“Settings-user” 在打开的配置文件里面,加入下面图中的这句代码即可&q ...

  5. matlab 绘制条状图形

    clear,clc;A=zeros(1080,1920,3);A(:,1:384,:)=0;A(:,385:768,:)=10;A(:,769:1152,:)=20;A(:,1153:1536,:)= ...

  6. SV中的Interface和Program

    Interface:SV中新定义的接口方式,用来简化接口连接,使用时注意在module或program之外定义interface,然后通过'include来添加进工程. interface  arb_ ...

  7. sql when null 判断

    Sql Server 中使用case when then 判断某字段是否为null,和判断是否为字符或数字时的写法不一样,如果不注意,很容易搞错 错误方法: CASE columnName WHEN ...

  8. idea 上搭建 Mybatis 逆向工程

    网盘地址:https://pan.baidu.com/s/1VAILpdgQbFk9t89eEv_nWQ 提取码:xdyc

  9. Thinkphp中查询复杂sql查询表达式,如何表达MYSQL中的某字段不为空is not null?

    Thinkphp中查询复杂sql查询表达式,如何表达MYSQL中的某字段不为空is not null?先上两种实现方式的实例:$querys["house_type_image"] ...

  10. 一个快速检测系统CPU负载的小程序

    原理说明 在对服务器进行维护时,有时也遇到由于系统 CPU(利用率)负载过高导致业务中断的情况.服务器上可能运行多个进程,查看单个进程的 CPU 都是正常的,但是整个系统的 CPU 负载可能是异常的. ...