AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Entfernung zwischen zwei Pixelkoordinaten
Thema durchsuchen
Ansicht
Themen-Optionen

Entfernung zwischen zwei Pixelkoordinaten

Ein Thema von cRayZo · begonnen am 2. Nov 2007 · letzter Beitrag vom 2. Nov 2007
Antwort Antwort
Seite 1 von 2  1 2      
cRayZo

Registriert seit: 30. Jul 2007
156 Beiträge
 
Delphi 6 Personal
 
#1

Entfernung zwischen zwei Pixelkoordinaten

  Alt 2. Nov 2007, 13:55
Hi, ich möchte die entfernung zwischen 2 pixelpunkten in einem Panel berechnen lassen, und das wie folgt.

in unserem Hörsaal haben wir ca 30 PCs. Ich möchte ein Programm schreiben, mit dem man ein Surroundsound für diese PCs erstellen kann. Dafür hab ich mir eine Oberfläche (im Anhang) erstellt und möchte jetzt für jeden PC die Lautstärke in Abhängigkeit zur Entferung eines Punktes(welcher sich mit dem Mauszeiger bewegt) berechnen.
Dazu habe ich folgende Funktion aufgestellt und sie funktioniert auch reibungslos.

hier erstmal der code
Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject); //Timerintervall auf 250
          var
          topx:real; entfernung:integer;
          leftx:real;
          shape1top, shape1left:integer;
   begin
    shape1Top:=shape1.Top;shape1left:=shape1.Left;

//PC031
topx:=abs(PC031.Top-shape1Top);
leftx:=abs(PC031.left-shape1left);
entfernung:=(250*trunc(ntewurzel(2,trunc(power(leftx,2)+power(topx,2)))));
if entfernung>65000 then entfernung:=65000 else;
SetMasterVolume(MasterVolumeControl,65000-entfernung);
{Lautstärke des PCs}:=floattostr(65000-entfernung); //6500 als maximaler Lautsärkewert
Problem ist nur, dass sie viel zu viel Performace nimmt, vor allem wenn ich diese Funktion 30 mal jede Viertelsekunde durchlaufen lassen muss.

so lange rede kurzer sinn, habt ihr eine einfachere Lösung mit der ich die Entfernung zweier Punkte ausrechnen kann? sie sollte allerdings noch möglichst genau sein

schonmal thx für die Antwort, lg cRayZo
Miniaturansicht angehängter Grafiken
projekt2_921.jpg  
  Mit Zitat antworten Zitat
dominikkv

Registriert seit: 30. Sep 2006
Ort: Gundelfingen
1.109 Beiträge
 
Delphi 2007 Professional
 
#2

Re: Entfernung zwischen zwei Pixelkoordinaten

  Alt 2. Nov 2007, 14:03
Zitat von cRayZo:
Dafür hab ich mir eine Oberfläche (im Anhang)
wo?
Ansonsten:
Entfernung := Wurzel(X*X+Y*Y)
Wobei X und Y der X- und Y-Abstand sind.
Als Wurzel kannst du SQRT aus der Math.pas nehmen
Dominik
Wer anderen eine Grube gräbt, hat ein Gruben-Grab-Gerät!
  Mit Zitat antworten Zitat
cRayZo

Registriert seit: 30. Jul 2007
156 Beiträge
 
Delphi 6 Personal
 
#3

Re: Entfernung zwischen zwei Pixelkoordinaten

  Alt 2. Nov 2007, 14:12
joa also Bild ist jetzt im Anhang^^
zu deinem Tipp:
Entfernung := Wurzel(X*X+Y*Y) ist ja nichts anderes als
power(x,2)+power(y,2) so wie ich es benutzt habe
der Rest in meiner Gleichung rundet den Wert ja nur und rechnet diesen in die Lautstärke um
so wie ich es gemacht habe, ich hab die Änderung von dir trotzdem mal ausprobiert..die performance wird noch miserabler^^ Will garned dran denken wies dann aussieht, wenn das Senden der Lautstärke an die PCs performancemäßig noch gehen soll^^
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.544 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Entfernung zwischen zwei Pixelkoordinaten

  Alt 2. Nov 2007, 14:16
Evtl. bringt der Einsatz von Threads schon einmal etwas.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
cRayZo

Registriert seit: 30. Jul 2007
156 Beiträge
 
Delphi 6 Personal
 
#5

Re: Entfernung zwischen zwei Pixelkoordinaten

  Alt 2. Nov 2007, 14:21
Zitat von DeddyH:
Evtl. bringt der Einsatz von Threads schon einmal etwas.
ja da hast du auf jeden Fall recht, vorteil auf jeden Fall weil ich dazu noch einen dualcore hab. Nur mal so als Leistungsvergleich: wenn ich die Funktion so schnell wie möglich und so oft wie möglich 15 mal berechnen lass habe ich ne volle auslastung von einem Kern, der andere wird nicht benutzt.

Problem ist nur, ich weiß nicht wie ich einen Thread erstelle, noch nie gebraucht^^
  Mit Zitat antworten Zitat
Benutzerbild von Nikolas
Nikolas

Registriert seit: 28. Jul 2003
1.528 Beiträge
 
Delphi 2005 Personal
 
#6

Re: Entfernung zwischen zwei Pixelkoordinaten

  Alt 2. Nov 2007, 14:23
Delphi-Quellcode:
topx:=abs(PC031.Top-shape1Top);
leftx:=abs(PC031.left-shape1left);
entfernung:=(250*trunc(ntewurzel(2,trunc(power(leftx,2)+power(topx,2)))));
if entfernung>65000 then entfernung:=65000 else;
SetMasterVolume(MasterVolumeControl,65000-entfernung);
{Lautstärke des PCs}:=floattostr(65000-entfernung); //6500 als maximaler Lautsärkewert
das kann man aber deutlich schöner machen.

a) die 65000 als Konstante deklarieren, reine Zahlen haben im Code eigentlich nichts zu run.

if entfernung>65000 then entfernung:=65000 else; was macht das else? nimm doch einfach entfernung := min(entfernung, 65000);

entfernung:=(250*trunc(ntewurzel(2,trunc(power(leftx,2)+power(topx,2))))); wie wäre es mit
entfernung = trunc(250*sqrt(leftx*leftx+topx*topx)); selbstgeschriebene Funktionen sind wohl kaum schneller als das eingebaute sqrt, das sicherlich aufs höchste optimiert ist.
Erwarte das Beste und bereite dich auf das Schlimmste vor.
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.756 Beiträge
 
Delphi 10.4 Sydney
 
#7

Re: Entfernung zwischen zwei Pixelkoordinaten

  Alt 2. Nov 2007, 14:24
Hallo,

nur mal eine Verständnisfrage, warum berechnest Du die Entfernungen
in einem TimerIterval von 250ms?
Die Berechnungen müßen doch nur dann durchgeführt werden, wenn der Punkt verschoben wurde
und nicht permanent.

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#8

Re: Entfernung zwischen zwei Pixelkoordinaten

  Alt 2. Nov 2007, 14:26
Wenn ich mich richtig erinnere, ist sqrt sogar eine FPU-Operation und somit um einiges schneller als jede mögliche andere Implementierung. Achja, und so nebenbei, power(x, 2) ist um einiges langsamer als x*x. Naja, jedenfalls theoretisch, praktisch gesehen wird der Compiler es wahrscheinlich sowieso wegoptimieren und in x*x übersetzen, aber x*x ist immer noch schöner.
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
dominikkv

Registriert seit: 30. Sep 2006
Ort: Gundelfingen
1.109 Beiträge
 
Delphi 2007 Professional
 
#9

Re: Entfernung zwischen zwei Pixelkoordinaten

  Alt 2. Nov 2007, 14:31
hmm ich hab grad nen test gemacht:
Y := X*X ist ca 36 mal so schnell wie
Y := Trunc(Power(X, 2)); und dein ntewurzel kenne ich nicht :/
ich würde das so machen:
entfernung := 250 * round(SQRT(leftx * leftx + topx * topx)); edit:
ich seh grad, der vorschlag von Nikolas ist genauer, da er zuesrt *250 nimmt und dann die nachkommststellen abschneidet...
ansonsten kannst du ja noch runden xD
entfernung := round(250 * SQRT(leftx * leftx + topx * topx));
Dominik
Wer anderen eine Grube gräbt, hat ein Gruben-Grab-Gerät!
  Mit Zitat antworten Zitat
cRayZo

Registriert seit: 30. Jul 2007
156 Beiträge
 
Delphi 6 Personal
 
#10

Re: Entfernung zwischen zwei Pixelkoordinaten

  Alt 2. Nov 2007, 14:33
Zitat von Nikolas:
selbstgeschriebene Funktionen sind wohl kaum schneller als das eingebaute sqrt, das sicherlich aufs höchste optimiert ist.
klar nur wenn ich diese Funktion nciht kenne versuche ich mir anders zu helfen

joa also muss ich mich dann owhl erstmal in Threads probieren, anders wirds wohl kaum gehen, wenn ich mehr performance erreichen will.. oder hat jemand noch eine andere idee?
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 00:32 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz