AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein "Kreisberechnung" - Hülfe gesucht...
Thema durchsuchen
Ansicht
Themen-Optionen

"Kreisberechnung" - Hülfe gesucht...

Ein Thema von turboPASCAL · begonnen am 27. Okt 2010 · letzter Beitrag vom 27. Okt 2010
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#1

"Kreisberechnung" - Hülfe gesucht...

  Alt 27. Okt 2010, 09:51
Hi,

hab da mal ein kleines Problem. Wie könnte man bei einem rotiertem Text das umgebende Rechteck berechnen ?
Ich habe da mal was zur Verständlichkeit vorbereitet.

Gesucht ist das rot gepunktete Rechteck.
Miniaturansicht angehängter Grafiken
image.png  
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#2

AW: "Kreisberechnung" - Hülfe gesucht...

  Alt 27. Okt 2010, 09:57
Vielleicht hilft dir:

Delphi-Referenz durchsuchenCanvas.TextExtent oder auch direkt über die WinAPI: MSDN-Library durchsuchenGetTextExtentPoint32.

Oder willst du das unbedingt selbst ausrechnen?
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#3

AW: "Kreisberechnung" - Hülfe gesucht...

  Alt 27. Okt 2010, 10:51
Vielleicht hilft dir:

Delphi-Referenz durchsuchenCanvas.TextExtent oder auch direkt über die WinAPI: MSDN-Library durchsuchenGetTextExtentPoint32.

Oder willst du das unbedingt selbst ausrechnen?
Nein, das gibt nur Textlänge und Höhe an ohne Beachtung dessen Ausrichtung.

Zitat:
Oder willst du das unbedingt selbst ausrechnen?
Nicht unbedingt, wenn es nicht sein muss.
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#4

AW: "Kreisberechnung" - Hülfe gesucht...

  Alt 27. Okt 2010, 10:53
Zitat:
Vielleicht hilft dir:
Delphi-Referenz durchsuchenCanvas.TextExtent oder auch direkt über die WinAPI: MSDN-Library durchsuchenGetTextExtentPoint32.
Nein, das gibt nur Textlänge und Höhe an ohne Beachtung dessen Ausrichtung.
Soweit ich weiß nicht! Denn ich weiß, dass ich auch mal gedrehten Text ausgegeben habe und da wollte ich die Länge des gedrehten Textes und habe von Canvas.TextWidth/Height genau dieses Rechteck erhalten was du haben willst. Hab da extra noch mit Vektoren rumgerechnet und mir ne Funktion geschrieben, die mir die tatsächliche (gedrehte) Länge des Textes berechnet.
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Satty67

Registriert seit: 24. Feb 2007
Ort: Baden
1.566 Beiträge
 
Delphi 2007 Professional
 
#5

AW: "Kreisberechnung" - Hülfe gesucht...

  Alt 27. Okt 2010, 11:03
Du drehst den Text (oder das den Text umgebende Rechteck) an der linken/oberen Ecke um den Kreismittelpunkt.

Damit hast Du 3 Radien, ausgehen vom Text in 0° Position:

1) Top/Left -> Bottom/Left
2) Top/Left -> Top/Right
3) Top/Left -> Bottom/Right (die Diagonale durch den Text)

Alle drei Radien stellen die Diagonale eines umgebenden Rechteckes dar, die sich leicht über den Winkel (der jeweiligen Drehposition) berechnen lassen. Die jeweils äußeren Punkte der drei Rechtecke bilden dann das gesamt umgebende Rechteck.

TopAll = Min(Rect1.Top, Rect2.Top, Rect3.Top)
RightAll = Max(Rect1.Right, Rect2.Right, Rect3.Right) usw.

Geändert von Satty67 (27. Okt 2010 um 11:07 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#6

AW: "Kreisberechnung" - Hülfe gesucht...

  Alt 27. Okt 2010, 11:04
Nu, ich habe es so: (Test im Anhang)

Leider klappt es damit nicht.
Angehängte Dateien
Dateityp: zip Test.zip (210,7 KB, 9x aufgerufen)
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
Satty67

Registriert seit: 24. Feb 2007
Ort: Baden
1.566 Beiträge
 
Delphi 2007 Professional
 
#7

AW: "Kreisberechnung" - Hülfe gesucht...

  Alt 27. Okt 2010, 11:40
Deine Antwort bezieht sich nicht auf meinen Post?

Bei mir funktioniert es:
Delphi-Quellcode:
procedure TForm1.FormPaint(Sender: TObject);
const
  txt = '012346789 - Hello@World!';
var
  Rect1, Rect2, Rect3, RectTotal : TRect;
  fh,fw: integer;
  p1, p2: TPoint;
  ts: TSize;
begin
  SetFontDirection(Canvas.Font, 0);
  canvas.Brush.Style := bsClear;
  DrawCoordSys(canvas);

  // normal TextOut
  canvas.Font.Color := clGray;
  canvas.TextOut(150,150, txt);

  // get fontdim.
  fh := canvas.TextHeight(txt);
  fw := canvas.TextWidth(txt);

  canvas.Pen.Color := clBlue;
  canvas.Rectangle(150,150,150+fw, 150+fh);

  canvas.Pen.Color := clGray;
  canvas.Ellipse(150-fw, 150-fw,150+fw, 150+fw);


  // rotierter Text
  SetFontDirection(Canvas.Font, Winkel);
  canvas.Font.Color := clBlack;
  canvas.TextOut(150,150, txt);


  // Corner
  p1 := POINT(150, 150);
  DrawCross(canvas, p1.x, p1.Y, clYellow); // Nullpos


  p2 := POINT(150 + fw, 150);
  p2 := PointRotate(p1, p2, Winkel);
  DrawCross(canvas, p2.x, p2.Y, clRed);

  Rect1.Top := Math.Min(p1.y, p2.y);
  Rect1.Left := Math.Min(p1.x, p2.x);
  Rect1.Bottom := Math.Max(p1.y, p2.y);
  Rect1.Right := Math.Max(p1.x, p2.x);

  p2 := POINT(150 + fw, 150 + fh);
  p2 := PointRotate(p1, p2, Winkel);
  DrawCross(canvas, p2.x, p2.Y, clGreen);

  Rect2.Top := Math.Min(p1.y, p2.y);
  Rect2.Left := Math.Min(p1.x, p2.x);
  Rect2.Bottom := Math.Max(p1.y, p2.y);
  Rect2.Right := Math.Max(p1.x, p2.x);

  p2 := POINT(150, 150 + fh);
  p2 := PointRotate(p1, p2, Winkel);
  DrawCross(canvas, p2.x, p2.Y, clBlue);

  Rect3.Top := Math.Min(p1.y, p2.y);
  Rect3.Left := Math.Min(p1.x, p2.x);
  Rect3.Bottom := Math.Max(p1.y, p2.y);
  Rect3.Right := Math.Max(p1.x, p2.x);

  RectTotal.Top := Math.Min( Rect1.Top, Math.Min(Rect2.Top, Rect3.Top));
  RectTotal.Left := Math.Min( Rect1.Left, Math.Min(Rect2.Left, Rect3.Left));
  RectTotal.Bottom := Math.Max( Rect1.Bottom, Math.Max(Rect2.Bottom, Rect3.Bottom));
  RectTotal.Right := Math.Max( Rect1.Right, Math.Max(Rect2.Right, Rect3.Right));

  canvas.Rectangle(Rect1);
  canvas.Rectangle(Rect2);
  canvas.Rectangle(Rect3);

  canvas.Pen.Color := clRed;
  canvas.Pen.Width := 2;
  canvas.Rectangle(RectTotal);

  ts := Canvas.TextExtent(txt);
  Label1.Caption := format('Winkel: %d°'#13'Textlänge: %d, Texthöhe: %d (in Pixel)', [Winkel, ts.cx, ts.cy]);

end;
Miniaturansicht angehängter Grafiken
rechteckrotattion.jpg  

Geändert von Satty67 (27. Okt 2010 um 11:42 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#8

AW: "Kreisberechnung" - Hülfe gesucht...

  Alt 27. Okt 2010, 11:45
@Satty: Schau dir doch mal die angezeigten Werte im Label an. Die stimmen nicht.
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Benutzerbild von Aphton
Aphton

Registriert seit: 31. Mai 2009
1.198 Beiträge
 
Turbo Delphi für Win32
 
#9

AW: "Kreisberechnung" - Hülfe gesucht...

  Alt 27. Okt 2010, 11:53
Hier ein mathematischer Ansatz!
Miniaturansicht angehängter Grafiken
rechenhilfe.png  
das Erkennen beginnt, wenn der Erkennende vom zu Erkennenden Abstand nimmt
MfG
  Mit Zitat antworten Zitat
Satty67

Registriert seit: 24. Feb 2007
Ort: Baden
1.566 Beiträge
 
Delphi 2007 Professional
 
#10

AW: "Kreisberechnung" - Hülfe gesucht...

  Alt 27. Okt 2010, 12:02
@Satty: Schau dir doch mal die angezeigten Werte im Label an. Die stimmen nicht.
Die Werte des Labels werden ja nicht angepasst, hat also mit der Lösung wenig zu tun.

Die Fläche des umgebenden Rechtecks ist eine Obermenge der Teilrechtecke, das stimmt auf jeden Fall. Ich hab' mich einfach am bestehenden Code orientiert. Man kann das sicher auch direkter berechnen, evtl. Aphton's Weg.

Geändert von Satty67 (27. Okt 2010 um 12:07 Uhr)
  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 05:44 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