AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Mathematisches problem: Achsenkreuz

Mathematisches problem: Achsenkreuz

Offene Frage von "theomega"
Ein Thema von theomega · begonnen am 22. Jul 2004 · letzter Beitrag vom 23. Jul 2004
Antwort Antwort
Seite 2 von 2     12
Benutzerbild von Luckie
Luckie
(Moderator)

Registriert seit: 29. Mai 2002
37.314 Beiträge
 
Delphi 2006 Professional
 
#11

Re: Mathematisches problem: Achsenkreuz

  Alt 22. Jul 2004, 22:39
Nö. ORG_X, ORG_Y und LEN_X, LEN_Y kann er ja beliebig wählen. Ich habe es nur eben der übersichtlichkeithalber als Konstanten deklariert.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von fkerber
fkerber
(CodeLib-Manager)

Registriert seit: 9. Jul 2003
Ort: Ensdorf
6.717 Beiträge
 
Delphi XE Professional
 
#12

Re: Mathematisches problem: Achsenkreuz

  Alt 22. Jul 2004, 22:48
Hi!

Wenn ich Orgx und Orgy auf beidemale 100 setze, kommt da was komisches raus.
Und der Punkt ließ sich auch nicht mehr einzeichnen.

Ciao fkerber
Miniaturansicht angehängter Grafiken
bild1_494.png  
Frederic Kerber
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie
(Moderator)

Registriert seit: 29. Mai 2002
37.314 Beiträge
 
Delphi 2006 Professional
 
#13

Re: Mathematisches problem: Achsenkreuz

  Alt 22. Jul 2004, 22:57
Moment habe es gleiche, da habe ich irgendwo vergessen mit den Konstanten zu arbeiten.
DrawHorzMarker(Bmp.Canvas, pt, Origin.X+10); // so stimmt es Und:
cntVerMarkers := (LEN_X - ORG_X) div SCALE; Es lag also nicht an den Prozeduren, sondern wie ich sie benutzt habe, ich habe ihnen falsche Werte übergeben.

Und das mit dem Punkt ist logisch. Du musst ja auch den Punkt in den Einheiten des Koordinatenkreuzes angeben. Und deins geht eben nicht bis 250 und 250, sondern nur bis beides male 18 oder so - habe die Striche jetzt nicht gezählt.


Im Anhang die korrigierte Version.

Nachtrag 1: Ich habe die Achsen jetzt noch beschriftet, siehe Screenshot.
Nachtrag 2: Jetzt haben die Achsen noch Pfeile und man kann Achsen- , Pfeil-, Hintergrund-, Schrift- und Punktfarbe definieren.
Miniaturansicht angehängter Grafiken
achsenkreuz.png  
Angehängte Dateien
Dateityp: zip achsenkreuz_178.zip (2,6 KB, 16x aufgerufen)
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie
(Moderator)

Registriert seit: 29. Mai 2002
37.314 Beiträge
 
Delphi 2006 Professional
 
#14

Re: Mathematisches problem: Achsenkreuz

  Alt 23. Jul 2004, 15:59
Falls es der Threadersteller übersehen hat, will ich es noch mal nach oben holen.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von theomega
theomega

Registriert seit: 18. Jun 2002
684 Beiträge
 
#15

Re: Mathematisches problem: Achsenkreuz

  Alt 23. Jul 2004, 16:05
nicht dass ich es übersehen hätte. habe es jetzt alles zusammen in eine Klasse gepackt (TAchsenKreuz abgeleitet von Paintbox), aber es gehen manche sache einfach immer noch nicht!
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie
(Moderator)

Registriert seit: 29. Mai 2002
37.314 Beiträge
 
Delphi 2006 Professional
 
#16

Re: Mathematisches problem: Achsenkreuz

  Alt 23. Jul 2004, 16:06
Was geht nicht? Also mein Code erfüllt alle deine Wünsche, so wie ich sie verstanden habe.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von theomega
theomega

Registriert seit: 18. Jun 2002
684 Beiträge
 
#17

Re: Mathematisches problem: Achsenkreuz

  Alt 23. Jul 2004, 16:14
wenn ich das wüsste, was nicht geht, der code spinnt manchmal einfach rum!
aber ich poste ihn hier mal:
Delphi-Quellcode:
unit AchsenKreuz;

interface

uses
  SysUtils, Classes, Controls, ExtCtrls,Dialogs,Graphics;


type TEPoint=record
  x,y:extended;
end;

type TEPixel=record
  x,y:integer;
  col:TColor;
end;

type
  TAchsenKreuz = class(TPaintBox)
  private
    { Private-Deklarationen }

    Ffrom_x: extended;
    Fto_y: extended;
    Fto_x: extended;
    Ffrom_y: extended;

    t_width,t_height:extended;


    Fdraw_axes: boolean;

    td_pixels:array of TEPixel;
    Faxes_color: TColor;

    procedure Setfrom_x(const Value: extended);
    procedure Setfrom_y(const Value: extended);
    procedure Setto_x(const Value: extended);
    procedure Setto_y(const Value: extended);

    procedure init_values();
    procedure Setdraw_axes(const Value: boolean);
    procedure Setaxes_color(const Value: TColor);
  protected
    { Protected-Deklarationen }
  public
    { Public-Deklarationen }
    //Public zu Debug-Zwecken
    x_scale,y_scale:extended;
    org:TEPoint;

    constructor Create(AOwner: TComponent); override;
    procedure Paint; override;
    procedure draw_point(x,y:extended;col:TColor);
    function pix2point(px,py:integer):TEPoint;
    procedure loschen;
  published
    { Published-Deklarationen }
    property from_x:extended read Ffrom_x write Setfrom_x;
    property to_x:extended read Fto_x write Setto_x;
    property from_y:extended read Ffrom_y write Setfrom_y;
    property to_y:extended read Fto_y write Setto_y;
    property draw_axes:boolean read Fdraw_axes write Setdraw_axes;
    property axes_color:TColor read Faxes_color write Setaxes_color;

  end;

procedure Register;

implementation


constructor TAchsenKreuz.Create(AOwner: TComponent);
begin;
//Bis jetzt noch unütz
setlength(td_pixels,0);
inherited Create(AOwner);
end;


procedure TAchsenKreuz.Paint;
var i:integer;
begin;
init_values;

//Bis jetz noch unütz
for i:= low(td_pixels) to high(td_pixels) do begin;
  canvas.Pixels[td_pixels[i].x,td_pixels[i].y] := td_pixels[i].col;
end;

if (Fdraw_axes) then begin;
  Canvas.Pen.Color := Faxes_color;
  canvas.Pen.Style := psSolid;
  Canvas.MoveTo(round(org.X),0);
  Canvas.LineTo(round(org.X),height);

  Canvas.MoveTo(0,round(org.y));
  Canvas.LineTo(width,round(org.y));
end;


end;

procedure TAchsenKreuz.draw_point(x,y:extended;col:TColor);
begin;
//Bis jetzt noch unütz
{setlength(td_pixels,length(td_pixels)+1);
td_pixels[high(td_pixels)].x := round(org.x + x*x_scale);
td_pixels[high(td_pixels)].y := round(org.y - y*y_scale);
td_pixels[high(td_pixels)].col := col;
}

canvas.Pixels[round(org.x + x*x_scale),round(org.y - y*y_scale)] := col;
paint;
end;

//Wandelt Delphi Pixel in Achsenkreu Koordinaten um
function TAchsenKreuz.pix2point(px,py:integer):TEPoint;
begin;
if ((x_scale>0) AND (y_scale>0)) then begin;
result.x := (px-org.x)/x_scale;
result.y := (-py+org.y)/y_scale;
end
else begin;
  result.x := 99999;
  result.y := 99999;
end
end;

//löscht die paintbox
procedure TAchsenKreuz.loschen;
begin;
canvas.Brush.Color := color;
canvas.Pen.Style := psClear;
canvas.Rectangle(0,0,width,height);
end;

procedure Register;
begin
  RegisterComponents('Beispiele', [TAchsenKreuz]);
end;

//Berechnungen
procedure TAchsenKreuz.init_values;
begin
  t_width := abs(ffrom_x)+abs(fto_x);
  t_height:= abs(ffrom_y)+abs(fto_y);

  if ((t_width>0) AND (t_height>0)) then begin;
    try
      x_scale:=Width / t_width;
    except
      on E: Exception do
        messagedlg('XScale '+floattostr(x_scale)+'/'+floattostr(t_width)+' '+ E.Message,mterror,[mbok],0);
    end;

    try
      y_scale:=self.Height / t_height;
    except
      on E: Exception do
        messagedlg('YScale '+floattostr(Y_scale)+'/'+floattostr(t_height)+' '+ E.Message,mterror,[mbok],0);
    end;
    org.X := ffrom_x*(-1)*x_scale;
    org.y := fto_y*y_scale;
  end;

end;

procedure TAchsenKreuz.Setdraw_axes(const Value: boolean);
begin
  Fdraw_axes := Value;
  init_values;
end;

procedure TAchsenKreuz.Setfrom_x(const Value: extended);
begin
  Ffrom_x := Value;
  init_values;
end;

procedure TAchsenKreuz.Setfrom_y(const Value: extended);
begin
  Ffrom_y := Value;
  init_values;
end;

procedure TAchsenKreuz.Setto_x(const Value: extended);
begin
  Fto_x := Value;
  init_values;
end;

procedure TAchsenKreuz.Setto_y(const Value: extended);
begin
  Fto_y := Value;
  init_values;
end;

procedure TAchsenKreuz.Setaxes_color(const Value: TColor);
begin
  Faxes_color := Value;
end;

end.
irgendwie scheinen manche ausschnitte probleme zu bereiten, ich kann aber das nicht näher bestimmen welche!
Ich bezweifle auch, dass jemand meinen (sicher schlecht geschriebenen) code versteht!

Grüße und Danke
TO
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:47 Uhr.
Powered by vBulletin® Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2019 by Daniel R. Wolf