Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > C++ Builder
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 16-06-2008
colx007 colx007 is offline
Registrado
 
Registrado: jun 2008
Posts: 2
Poder: 0
colx007 Va por buen camino
Graficar superficies en 3d

Hola,

¿Cómo puedo graficar superficies o mapas a partir de datos en 3 coordenadas (x, y, z)?

Gracias
Responder Con Cita
  #2  
Antiguo 16-06-2008
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
te dejo un ejemplo para graficar funciones. Como ves, esta sacando las z de una funcion. Si tu creas un array donde colocas tu mapa de valores, entonces solo tendras q hacer z := mapa[x][y]; Esta funcion por eso es muy simple: pierde escala, etc... deberàs usar normalizadores varios (factores q multipliquen a las x e y en i,j) para tener una proyeccion más correcta.

Código Delphi [-]
unit proyect;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure DrawLine(x,y,z : integer);
    function  Cl(z : integer; mx : integer) : TColor;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

uses math;

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
var
        x,y,z : integer;
begin

        for y := 300 downto -300 do
        for x := 600 downto -600 do
        begin
                z := Round(150*cos(PI*x/100)*sin(PI*y/200));
//                z := Round(150*Sin((x + y)/100));
                DrawLine(x,y,z);
                Application.ProcessMessages;
        end;
end;

procedure TForm1.DrawLine(x,y,z : integer);
var
        cx,cy : integer;
        i,j   : integer;
begin
        cx := Width div 2;
        cy := Height div 2;

        i := x - Round(-1.3*y) + cx;
        j := cy - y;

        Canvas.Pen.Color := Cl(z,150);
        Canvas.MoveTo(i,j);
        Canvas.LineTo(i,j-z)
end;

function TForm1.Cl(z : integer; mx : integer) : TColor;
begin
        if z > 0 then
        Cl := TColor(Round($FF*z/mx)*$000101)
        else
        Cl := TColor(Round($FF*-z/mx)*$010000);
end;

end.

me entretengo a ver si saco lo mismo con un array...
Responder Con Cita
  #3  
Antiguo 18-06-2008
colx007 colx007 is offline
Registrado
 
Registrado: jun 2008
Posts: 2
Poder: 0
colx007 Va por buen camino
Gracias, pero estoy programando en Builder c++ 6. De todas formas voy a ver cuales funciones me sirven.
Responder Con Cita
  #4  
Antiguo 18-06-2008
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
bueno la traduccion es sencilla. Saludos.

Última edición por coso fecha: 21-06-2008 a las 10:53:08.
Responder Con Cita
  #5  
Antiguo 24-06-2008
BC++ BC++ is offline
Miembro
 
Registrado: ene 2008
Posts: 44
Poder: 0
BC++ Va por buen camino
graficar en 3d

Hola Amigo del foro, esto hice una vez. lo saque de navegar por internet y fui agregando cosas a mi modo, lo que hace este programa, es una funcion en 2d SIMPLE Y SENCILLA (1RO) .
(2DO) hago una funcion en 3D,con el concepto de que una figura en 3d se arma a partir de la suma de los planos la misma funcion en (x,y) , en (z,x) y (z,y) y las muestro por separadas(a estos planos) y por ultimo uno los 3 planos para mostrarlo ( podes con el ScrollBar ROTAR Y GIRARLO).

Soy principiante en el tema pero por esas cosas de la vida te puede servir.
Saludos.

BC++

te dejo el codigo, lo unico q tenes q hacer es poner en el form. TImages y botones

//----------------------CODIGO-------------------------------------------

//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include <math.h>
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
double f(double ,double );
void __fastcall TForm1::Button1Click(TObject *Sender)
{ //ejemplo para 2d grafico unicamente los ejes
int Maxx=Image->Width;
int Maxy=Image->Height;
//Traza el eje X
Image->Canvas->MoveTo(0,Maxy/2);
Image->Canvas->LineTo(Maxx,Maxy/2);
//Traza el eje Y
Image->Canvas->MoveTo(Maxx/2,0);
Image->Canvas->LineTo(Maxx/2,Maxy);

}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{ //grafico un seno, y lo superpongo sobre el eje x,y q cree en el boton de arriba
int Maxx=Image->Width;
int Maxy=Image->Height;
//Traza el eje X
Image->Canvas->MoveTo(0,Maxy/2);
Image->Canvas->LineTo(Maxx,Maxy/2);
//Traza el eje Y
Image->Canvas->MoveTo(Maxx/2,0);
Image->Canvas->LineTo(Maxx/2,Maxy);
//Declarando funciones que van a ser utilizadas
float x,y,var=0.01,xini=-10,xfin=10,posx,posy;
//Graficando la función en si
for(x=xini;x<xfin;x+=var)
{ y=sin(x);
posx=x*Maxx/(xfin-xini);
posy=y*Maxx/(xfin-xini);
Image->Canvas->Pixels[Maxx/2+posx][Maxy/2-posy]=clRed;
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button3Click(TObject *Sender)
{
int Maxx=Image1->Width;
int Maxy=Image1->Height;
//Traza el eje X
Image1->Canvas->MoveTo(0,Maxy/2);
Image1->Canvas->LineTo(Maxx,Maxy/2);
//Traza el eje Y
Image1->Canvas->MoveTo(Maxx/2,0);
Image1->Canvas->LineTo(Maxx/2,Maxy);
//Declarando funciones que van a ser utilizadas
float x,y,z,var=0.1,xini=-10,xfin=10,posx,posy;
//Graficando la función en si
for(x=xini/3;x<xfin/3;x+=var)
{ for(z=xini/3;z<xfin/3;z+=var)
{ y=f(x,z);//y=sin(x)+z; //Llamada a una función ya definida
posx=x*Maxx/(xfin-xini);
posy=y*Maxx/(xfin-xini);
Image1->Canvas->Pixels[Maxx/2+posx][Maxy/2-posy]=clRed;
posx=x*Maxx/(xfin-xini);
posy=z*Maxx/(xfin-xini);
Image2->Canvas->Pixels[Maxx/2+posx][Maxy/2-posy]=clRed;
posx=y*Maxx/(xfin-xini);
posy=z*Maxx/(xfin-xini);
Image3->Canvas->Pixels[Maxx/2+posx][Maxy/2-posy]=clRed;
}
}
}
//--------------------------------------------------------------------------

void __fastcall TForm1::Button5Click(TObject *Sender)
{
int Maxx=Image1->Width;
int Maxy=Image1->Height;
Image4->Canvas->Pen->Color = clWhite;
Image4->Canvas->FillRect(Rect(0,0,Maxx,Maxy));
Image4->Canvas->Pen->Color = clBlack;

float Elev=ScrollBar1->Position*(2*M_PI)/100;
float Giro=ScrollBar2->Position*(2*M_PI)/100;
float x,y,z,var=0.1,xini=-10,xfin=10,posx,posy,x2D,y2D;
for(x=xini/3;x<xfin/3;x+=var)
{ for(z=xini/3;z<xfin/3;z+=var)
{ y=f(x,z);
x2D= x*cos(Elev)-z*sin(Elev);
y2D=-x*sin(Elev)*sin(Giro)+y*cos(Giro)-z*cos(Elev)*sin(Giro);
posx=x2D*Maxx/(xfin-xini);
posy=y2D*Maxx/(xfin-xini);
Image4->Canvas->Pixels[Maxx/2+posx][Maxy/2-posy]=clGreen+clBlue;
}
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ScrollBar1Change(TObject *Sender)
{
Button5Click(this);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ScrollBar2Change(TObject *Sender)
{
Button5Click(this);
}
//---------------------------------------------------------------------------
double f(double x,double z)
{ return sin(x*x+z)*exp(x);
//return sqrt(z*z+x*x)*sin(x*x);
}
void __fastcall TForm1::Button4Click(TObject *Sender)
{
int Maxx=Image1->Width;
int Maxy=Image1->Height;
//Traza el eje X
Image1->Canvas->MoveTo(0,Maxy/2);
Image1->Canvas->LineTo(Maxx,Maxy/2);
//Traza el eje Y
Image1->Canvas->MoveTo(Maxx/2,0);
Image1->Canvas->LineTo(Maxx/2,Maxy);
//Declarando funciones que van a ser utilizadas
float x,y,var=0.01,xini=-10,xfin=10,posx,posy;
//Graficando la función en si
for(x=xini;x<xfin;x+=var)
{ y=sin(x);
posx=x*Maxx/(xfin-xini);
posy=y*Maxx/(xfin-xini);
Image1->Canvas->Pixels[Maxx/2+posx][Maxy/2-posy]=clBlue;
}
}
//------------------------------------------------------------------------
//------------------------------------------------------------------------

SUERTE!!
pD: Si alguno conoce la direccion Web de este codigo tendria que agregarlo, yo no me acuerdo lamentablemente.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Graficar vía API Google MAXIUM Varios 0 20-05-2008 17:15:33
Graficar Funciones jack10 C++ Builder 6 18-06-2007 21:12:26
Graficar lineas bosterito Gráficos 1 13-02-2007 17:13:57
¿Grandes superficies pequeños cerebros? marcoszorrilla La Taberna 11 04-10-2006 08:13:25
Graficar En 3d En Delphi jose_2057111 Gráficos 1 26-11-2004 09:33:05


La franja horaria es GMT +2. Ahora son las 15:20:53.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi