Buenas tardes gente de taringa
El dia de hoy les traigo el ya conocido algoritmo para dibujar lineas de Bresenham implementado en lenguaje C++, aunque con la capacidad de poder dibujar lineas con pendiente negativa y dibujar bastante bien las lineas horizontales y verticales aun cuando x0>x1 y y0>y1
bueno sin mas les mando un gran saludo y les dejo este pequeño aporte de mi parte.
*Dibuja en una sencilla matriz de char en consola, asi que no necesita nada de la librerias de graficos de borland o de openGl
#include "Bresenhamv2.h"
#include
#include
#include
using namespace std;
int tamanio = 75;
char pantalla[75][75];
void Imprime();
void LineaBresenham(int x1, int y1, int x2, int y2);
int main(){
bool sigue = true;
char decide;
while (sigue){
for (int i = 0; i <= tamanio; i++){
for (int j = 0; j <= tamanio; j++){
pantalla[j] = '.';
}
}
// Termina Llenado
int x1;
int y1;
int x2;
int y2;
cout << "Ingresa x1 " << endl;
cin >> x1;
cout << "Ingresa y1 " << endl;
cin >> y1;
cout << "Ingresa x2 " << endl;
cin >> x2;
cout << "Ingresa y2 " << endl;
cin >> y2;
if (x1<0 || x1 > 75 || x2 <0 || x2 >75 || y1<0 || y1> 75 || y2 <0 || y2>75){
cout << "Ingrese Coordenadas entre 0 y 75" << endl;
}
else{
LineaBresenham(x1, y1, x2, y2);
Imprime();
}
cout << "Si desea seguir trazando lineas oprima Y, en caso contrario oprima cualquier tecla" << endl;
cin >> decide;
if (decide == 'y' || decide == 'Y'){
sigue = true;
}
else {
sigue = false;
cout << "Adios" << endl;
}
}
return 0;
}
void LineaBresenham(int x1, int y1, int x2, int y2){
int pasoy;
int pasox;
int deltaX = (x2 - x1);
int deltaY = (y2 - y1);
if (deltaY < 0) {
deltaY = -deltaY;
pasoy = -1;
}
else {
pasoy = 1;
}
if (deltaX < 0) {
deltaX = -deltaX;
pasox = -1;
}
else {
pasox = 1;
}
int x = x1;
int y = y1;
pantalla[x][y] = 'I';
if (deltaX>deltaY){
int p = 2 * deltaY - deltaX;
int incE = 2 * deltaY;
int incNE = 2 * (deltaY - deltaX);
while (x != x2){
x = x + pasox;
if (p < 0){
p = p + incE;
}
else {
y = y + pasoy;
p = p + incNE;
}
pantalla[x][y] = '*';
}
}
else{
int p = 2 * deltaX - deltaY;
int incE = 2 * deltaX;
int incNE = 2 * (deltaX - deltaY);
while (y != y2){
y = y + pasoy;
if (p < 0){
p = p + incE;
}
else {
x = x + pasox;
p = p + incNE;
}
pantalla[x][y] = '*';
}
}
}
void Imprime(){
for (int i = 0; i <= tamanio; i++){
for (int j = 0; j <= tamanio; j++){
cout << pantalla[j];
}
cout << endl;
}
cin.get();
}
A continuacion les dejare unas capturas de pantalla con las pruebas


Aqui les dejo igualmente el codigo en archivo cpp
https://drive.google.com/file/d/0B6H2cOm_wRaDQ3hsd3RtQUFjU1U/view?usp=sharing
"Ni Reyes Ni Dioses solo el hombre"
El dia de hoy les traigo el ya conocido algoritmo para dibujar lineas de Bresenham implementado en lenguaje C++, aunque con la capacidad de poder dibujar lineas con pendiente negativa y dibujar bastante bien las lineas horizontales y verticales aun cuando x0>x1 y y0>y1
bueno sin mas les mando un gran saludo y les dejo este pequeño aporte de mi parte.
*Dibuja en una sencilla matriz de char en consola, asi que no necesita nada de la librerias de graficos de borland o de openGl
#include "Bresenhamv2.h"
#include
#include
#include
using namespace std;
int tamanio = 75;
char pantalla[75][75];
void Imprime();
void LineaBresenham(int x1, int y1, int x2, int y2);
int main(){
bool sigue = true;
char decide;
while (sigue){
for (int i = 0; i <= tamanio; i++){
for (int j = 0; j <= tamanio; j++){
pantalla[j] = '.';
}
}
// Termina Llenado
int x1;
int y1;
int x2;
int y2;
cout << "Ingresa x1 " << endl;
cin >> x1;
cout << "Ingresa y1 " << endl;
cin >> y1;
cout << "Ingresa x2 " << endl;
cin >> x2;
cout << "Ingresa y2 " << endl;
cin >> y2;
if (x1<0 || x1 > 75 || x2 <0 || x2 >75 || y1<0 || y1> 75 || y2 <0 || y2>75){
cout << "Ingrese Coordenadas entre 0 y 75" << endl;
}
else{
LineaBresenham(x1, y1, x2, y2);
Imprime();
}
cout << "Si desea seguir trazando lineas oprima Y, en caso contrario oprima cualquier tecla" << endl;
cin >> decide;
if (decide == 'y' || decide == 'Y'){
sigue = true;
}
else {
sigue = false;
cout << "Adios" << endl;
}
}
return 0;
}
void LineaBresenham(int x1, int y1, int x2, int y2){
int pasoy;
int pasox;
int deltaX = (x2 - x1);
int deltaY = (y2 - y1);
if (deltaY < 0) {
deltaY = -deltaY;
pasoy = -1;
}
else {
pasoy = 1;
}
if (deltaX < 0) {
deltaX = -deltaX;
pasox = -1;
}
else {
pasox = 1;
}
int x = x1;
int y = y1;
pantalla[x][y] = 'I';
if (deltaX>deltaY){
int p = 2 * deltaY - deltaX;
int incE = 2 * deltaY;
int incNE = 2 * (deltaY - deltaX);
while (x != x2){
x = x + pasox;
if (p < 0){
p = p + incE;
}
else {
y = y + pasoy;
p = p + incNE;
}
pantalla[x][y] = '*';
}
}
else{
int p = 2 * deltaX - deltaY;
int incE = 2 * deltaX;
int incNE = 2 * (deltaX - deltaY);
while (y != y2){
y = y + pasoy;
if (p < 0){
p = p + incE;
}
else {
x = x + pasox;
p = p + incNE;
}
pantalla[x][y] = '*';
}
}
}
void Imprime(){
for (int i = 0; i <= tamanio; i++){
for (int j = 0; j <= tamanio; j++){
cout << pantalla[j];
}
cout << endl;
}
cin.get();
}
A continuacion les dejare unas capturas de pantalla con las pruebas



Aqui les dejo igualmente el codigo en archivo cpp
https://drive.google.com/file/d/0B6H2cOm_wRaDQ3hsd3RtQUFjU1U/view?usp=sharing
"Ni Reyes Ni Dioses solo el hombre"