![]() |
"Kreisberechnung" - Hülfe gesucht...
Liste der Anhänge anzeigen (Anzahl: 1)
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. |
AW: "Kreisberechnung" - Hülfe gesucht...
Vielleicht hilft dir:
![]() ![]() Oder willst du das unbedingt selbst ausrechnen? |
AW: "Kreisberechnung" - Hülfe gesucht...
Zitat:
Zitat:
|
AW: "Kreisberechnung" - Hülfe gesucht...
Zitat:
|
AW: "Kreisberechnung" - Hülfe gesucht...
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. |
AW: "Kreisberechnung" - Hülfe gesucht...
Liste der Anhänge anzeigen (Anzahl: 1)
Nu, ich habe es so: (Test im Anhang)
Leider klappt es damit nicht. |
AW: "Kreisberechnung" - Hülfe gesucht...
Liste der Anhänge anzeigen (Anzahl: 1)
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; |
AW: "Kreisberechnung" - Hülfe gesucht...
@Satty: Schau dir doch mal die angezeigten Werte im Label an. Die stimmen nicht.
|
AW: "Kreisberechnung" - Hülfe gesucht...
Liste der Anhänge anzeigen (Anzahl: 1)
Hier ein mathematischer Ansatz!
|
AW: "Kreisberechnung" - Hülfe gesucht...
Zitat:
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. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:40 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz