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

    参考资料: http://8287044.blog.51cto.com/5179921/1045274 TileMap编辑器使用   1.认识TileMap     TileMap是一款开源的地图编辑 ...

  2. Android View事件分发源码分析

    引言 上一篇文章我们介绍了View的事件分发机制,今天我们从源码的角度来学习下事件分发机制. Activity对点击事件的分发过程 事件最先传递给当前Activity,由Activity的dispat ...

  3. Leetcode: Repeated DNA Sequence

    All DNA is composed of a series of nucleotides abbreviated as A, C, G, and T, for example: "ACG ...

  4. SV中的线程

    SV中线程之间的通信可以让验证组件之间更好的传递transaction. SV对verilog建模方式的扩展:1) fork.....join 必须等到块内的所有线程都执行结束后,才能继续执行块后的语 ...

  5. select,radio,checkbox兼容性

  6. 使用Jmeter测试Dubbo接口(参数设置篇)

    WebSocket接口需要下载dubbo插件才能使用 本次下载的版本为jmeter-plugins-dubbo-1.3.6,下载完成后jar文件放到\lib\ext目录下 由于工作需要,最近需要对du ...

  7. python socket编程函数介绍

    网上看到一个socket中常用函数的介绍,记录一下 https://blog.csdn.net/rebelqsp/article/details/22109925

  8. 容易遗忘的JS知识点整理

    1.hasOwnProperty相关 为了判断一个对象是否包含自定义属性而不是原型链上的属性,我们需要使用继承自 Object.prototype 的 hasOwnProperty方法.hasOwnP ...

  9. Linux中Postfix邮件接收配置(四)

    Dovecot介绍 MRA邮件取回代理也有很多如courier-imap,cyrus-imap和dovecot这三个个工具,下面重点介绍Dovecot: 1.高安全性.据 Dovecot 的作者声称, ...

  10. MySQL数据库----事务处理

    事物处理  一. 什么是事务    一组sql语句批量执行,要么全部执行成功,要么全部执行失败 二.为什么出现这种技术 为什么要使用事务这个技术呢? 现在的很多软件都是多用户,多程序,多线程的,对同一 ...