AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

moveto, lineto

Ein Thema von jotbeyer · begonnen am 1. Nov 2021 · letzter Beitrag vom 1. Nov 2021
Antwort Antwort
jotbeyer

Registriert seit: 28. Okt 2021
2 Beiträge
 
#1

moveto, lineto

  Alt 1. Nov 2021, 07:15
Delphi-Version: 11 Alexandria
Moin zusammen,

mir ist bekannt, dass lineto ansetzt (startet) bei dem durch moveto(x,y) definierten Punkt und eine Linie zeichnet, allerdings den letzten Punkt der Linie nicht.
So weit so gut.
Wenn ich aber lineto der Länge Null setze, also moveto(x,y) und danach LineTo(x,y), dann wird ein Punkt gesetzt. Zu erwarten wäre ja, dass eine Linie der Länge Null nichts zeichnet.

Wie sind eure Meinungen dazu?

Viele Grüße, Jürgen
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
3.905 Beiträge
 
Delphi 12 Athens
 
#2

AW: moveto, lineto

  Alt 1. Nov 2021, 08:43
Lineto hat zwei Punkte, bei null Länge siehst Du Punkt 1.
  Mit Zitat antworten Zitat
Benutzerbild von Jasocul
Jasocul

Registriert seit: 22. Sep 2004
Ort: Delmenhorst
1.337 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: moveto, lineto

  Alt 1. Nov 2021, 09:52
Es wird vom Startpunkt bis zum Endpunkt gezeichnet, wobei der Endpunkt ausgelassen wird. D.h.: Wenn Startpunkt und Endpunkt identisch sind, wird der Punkt gezeichnet. Den Endpunkt nicht zu zeichnen, heißt ja nicht, dass dort vorhandene Zeichnungen gelöscht werden. Somit bleibt der Startpunkt als gezeichnet stehen.
Oder kurz:
Am Startpunkt mit dem Zeichnen anfangen und am Endpunkt nichts machen (auch nicht löschen).

Ob man nun bei der Bezeichnung lineto berücksichtigen sollte, ob es wirklich eine Linie wird, könnte man diskutieren. Oder man betrachtet einen Punkt als den Sonderfall einer Linie der Länge 0. Wobei man dann noch überlegen muss, ob ein Pixel nicht doch schon eine Länge 1 hat. Allerdings wird dann die Diskussion aufkommen, dass man eine Linie auch verlängern können muss. Bei einem Pixel ist allerdings nicht eindeutig, in welche Richtungen das gemacht werden darf.
Spaß beiseite. Eine Linie ist erst durch zwei unterschiedliche Punkte oder einen Punkt und einem Vektor definiert, wenn mich meine mathematischen Kenntnisse nicht verlassen haben. Wenn man das als Grundlage nimmt, dürfte lineto eigentlich nichts zeichnen. Offensichtlich ist dieser Sonderfall aber nicht berücksichtigt worden. Muss aber auch nicht, da das auch vom Programmierer berücksichtigt werden kann. Man muss nur wissen, wie lineto in so einem Fall reagiert.
Peter
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.116 Beiträge
 
Delphi 12 Athens
 
#4

AW: moveto, lineto

  Alt 1. Nov 2021, 13:12
Nein, bei Länge 0 sieht man nichts.

Bei Länge 1 (2 Pixel lang) sieht man einen Punkt.


Ich weiß grade nicht wie rum, aber ein Ende ist exclusive und wird nie gezeichnet.
Entweder der Endpunkt oder der Startpunkt. (vermutlich der Endpunkt, sie auch Rechtangle)



Im Prinzip, wenn man mehrere Linien hinterinander zeichnet, dann wird an den gemeinsamen Punkten nicht doppelt gezeichnet.
Ebenso bei Rechtangle oder Circle, wo die Figuren je ein Pixel kleiner sind, als width/height,



Fazit: die Linie ein Pixel länger berechnen oder zusätzlich noch einen Pixel zeichnen (wenn die Linie nur 1 Pixel breit ist).
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu ( 1. Nov 2021 um 13:18 Uhr)
  Mit Zitat antworten Zitat
jotbeyer

Registriert seit: 28. Okt 2021
2 Beiträge
 
#5

AW: moveto, lineto

  Alt 1. Nov 2021, 14:17
ja, vielen Dank für eure Antworten!

Zitat Jasocul: "Am Startpunkt mit dem Zeichnen anfangen und am Endpunkt nichts machen (auch nicht löschen)."

Das klingt logisch und so wird es sein.

Warum mache ich das überhaupt mit Linienlänge Null? Ich will eine Strichpunktlinie programmieren, und da sitzen zwischen den Strichen nun mal Punkte. Mit Pixels[] hatte ich das versucht, aber man sah sie nicht. Sie waren einfach zu klein. Bei der Auflösung bei meinem Surface pro 7 also nicht mehr sichtbar.(2736x1728)

Durch die LineTo() Geschichte ergibt sich mir nun die Möglichkeit, die Strichbreite zu setzen (muss ja genauso breit sein, wie die langen Striche...

Wie auch immer, LineTo() ist die Lösung, wenn man "dicke Punkte" braucht.

Danke nochmal!
  Mit Zitat antworten Zitat
Antwort Antwort

 

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 16:35 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