AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Punkt in der Schnittmenge dreier Kreise

Punkt in der Schnittmenge dreier Kreise

Ein Thema von Blitzschutz1 · begonnen am 8. Jun 2021 · letzter Beitrag vom 9. Jun 2021
Antwort Antwort
Seite 1 von 2  1 2   
Blitzschutz1

Registriert seit: 2. Dez 2011
Ort: Vogtland
9 Beiträge
 
Delphi 10.1 Berlin Starter
 
#1

Punkt in der Schnittmenge dreier Kreise

  Alt 8. Jun 2021, 12:44
Benötige mal wieder einen (oder auch mehrere) Denkanstöße: Wie kann man die Bildpunkte ermitteln, die in den Schnittmengen dreier Kreise
(für die additive RGB-Farbmischung) enthalten sind?
Wer es sich mal ansehen will, was ich meine http://www.spectrumcolors.de/cor_rgb_demo.php

Danke!
Wenn die Klugen nachgeben geschieht das was die Dummen wollen!
  Mit Zitat antworten Zitat
Michael II

Registriert seit: 1. Dez 2012
Ort: CH BE Eriswil
550 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Punkt in der Schnittmenge dreier Kreise

  Alt 8. Jun 2021, 13:42
Falls du genau das nachbilden willst, was ich auf der von dir verlinkten Seite sehe, dann kannst du die drei Kreise zeichnen und danach mit floodfill die gemeinsame Schnittmenge ausmalen. Ein floodfill Beispiel findest du hier. Du benötigst dazu nur einen Punkt P in der gemeinsamen Schnittmenge der drei Kreise K1,K2,K3. Ein solcher lässt sich natürlich leicht ermitteln. P = 1/3(M1+M2+M3), wobei Mi die Mittelpunkte der Kreise Ki.
Michael Gasser
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
8.378 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: Punkt in der Schnittmenge dreier Kreise

  Alt 8. Jun 2021, 13:54
Mathematisch sind die Punkte dadurch beschrieben, dass die drei Abstände zu den Kreismittelpunkten alle kleiner gleich dem Radius sind. Damit kannst du also feststellen, ob ein Punkt P(X,Y) in diesem Bereich liegt.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Andreas13

Registriert seit: 14. Okt 2006
Ort: Nürnberg
387 Beiträge
 
Delphi 10.3 Rio
 
#4

AW: Punkt in der Schnittmenge dreier Kreise

  Alt 8. Jun 2021, 14:33
Hallo Blitzschutz1,
Du brauchst zuerst eine Routine, welche die möglichen Schnittpunkte zweier Kreise bestimmt: Möglich sind 0, 1 oder 2 als Lösung eines Gleichungssystems aus zwei quadratischen Gleichungen:
Code:
(x - x_M1)^2 + (y - y_M1)^2 = R1^2    und   (x - x_M2)^2 + (y - y_M2)^2 = R2^2'
(x_M1, y_M1) und (x_M2, y_M2) sind die Koordinaten der beiden Kreismittelpunkte.
[Edit]: R1 und R2 sind die Radien der beiden Kreise.

Das wiederholst Du 3-mal für alle 3 Kombinationen von Kreispaaren:
K1-K2, K1-K3, K2-K3. Damit kannst Du bis zu 6 Schnittpunkte haben, von denen die richteigen 3 ausgewählt werden müssen.

Die "richtigen" Eckpunkte der möglichen Schnittmenge erfüllen folgende Bedingung:
Der Eckpunkt liegt am Umfang zweier Kreise und innerhalb eines der drei Kreise.

Also brauchst Du noch zwei weitere Routinen um festzustellen, ob ein Punkt am Umfang eines (oder zweier) Kreises liegt, und eine zur Feststellung, ob ein Punkt innerhalb eines Kreises liegt.

Hier muß Du unbedingt aufpassen, daß Du bei Gleitkommazahlen immer einen unscharfen Vergleich mit etwa SameValue(..) machst, sonst funken die immer vorhandenen Rundungsfehler dazwischen und kommt nichts Brauchbares raus.

Viel Erfolg!
Gruß, Andreas
Wenn man seinem Nächsten einen steilen Berg hinaufhilft, kommt man selbst dem Gipfel näher.
John C. Cornelius

Geändert von Andreas13 ( 8. Jun 2021 um 14:41 Uhr)
  Mit Zitat antworten Zitat
Andreas13

Registriert seit: 14. Okt 2006
Ort: Nürnberg
387 Beiträge
 
Delphi 10.3 Rio
 
#5

AW: Punkt in der Schnittmenge dreier Kreise

  Alt 8. Jun 2021, 15:53
Zitat:
Also brauchst Du noch zwei weitere Routinen um festzustellen, ob ein Punkt am Umfang eines (oder zweier) Kreises liegt, ...
Diese zweite Routine kannst Du Dir auch sparen, denn die Schnittpunkte zweier Kreise erfüllen diese Forderung ja immer...
Andreas
Wenn man seinem Nächsten einen steilen Berg hinaufhilft, kommt man selbst dem Gipfel näher.
John C. Cornelius
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
8.378 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: Punkt in der Schnittmenge dreier Kreise

  Alt 8. Jun 2021, 16:38
Das ganze wird in diesem Fall vermutlich noch einfacher, da zum einen die Mittelpunkte alle untereinander denselben Abstand A haben und die Radien R der drei Kreise alle gleich sind. Weiterhin gilt A < R, da es sonst keine Überschneidungen geben würde.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Blitzschutz1

Registriert seit: 2. Dez 2011
Ort: Vogtland
9 Beiträge
 
Delphi 10.1 Berlin Starter
 
#7

AW: Punkt in der Schnittmenge dreier Kreise

  Alt 8. Jun 2021, 23:54
Erstmal danke für alle Hinweise!

Mal sehen, ob ich es hinbekomme. Wobei mir das flootfill natürlich am besten gefallen will (weil es so schön einfach zu realisieren scheint).

Aber auch die anderen Lösungen werde ich mir ansehen. Schon umwas dabei zu lernen...
Wenn die Klugen nachgeben geschieht das was die Dummen wollen!
  Mit Zitat antworten Zitat
Michael II

Registriert seit: 1. Dez 2012
Ort: CH BE Eriswil
550 Beiträge
 
Delphi 10.4 Sydney
 
#8

AW: Punkt in der Schnittmenge dreier Kreise

  Alt 9. Jun 2021, 13:59
Das ganze wird in diesem Fall vermutlich noch einfacher, da zum einen die Mittelpunkte alle untereinander denselben Abstand A haben und die Radien R der drei Kreise alle gleich sind. Weiterhin gilt A < R, da es sonst keine Überschneidungen geben würde.
Nicht ganz:
Sei r der Radius der drei Kreise. Wenn die drei Kreismittelpunkte Eckpunkte eines gleichseitigen Dreiecks mit Seitenlänge a sind, dann haben je zwei Kreise eine gemeinsame Schnittmenge, wenn a<=2*r (bei Gleichheit genau einen Punkt).
Damit alle drei Kreise gemeinsame Punkte haben, muss a<=sqrt(3)*r gelten. (Überlegung: Die drei Kreise haben dann genau einen gemeinsamen Schnittpunkt, wenn sie sich im Schwerpunkt S des Dreiecks treffen. Wir wissen: Der Schwerpunkt S teilt die Seitenhalbierende (und hier gleichzeitig Höhenlinie) des Dreiecks im Verhältnis 2:1. => Die Höhe des Dreiecks beträgt also 1.5*r => Die Seitenlänge a damit r*sqrt(3). => Wenn a < r*sqrt(3) wird aus dem Schnittpunkt eine Schnittfläche.)
Michael Gasser

Geändert von Michael II ( 9. Jun 2021 um 15:12 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.237 Beiträge
 
Delphi 10.4 Sydney
 
#9

AW: Punkt in der Schnittmenge dreier Kreise

  Alt 9. Jun 2021, 15:07
Wenn man für aus jedem Kreismittelpunkt und dem zu untersuchenden Punkt ein rechtwinkliges Dreieck bildet, so befindet sich der Punkt dann in der Schnittmenge der 3 Kreise, wenn jede der errechneten Hypotenusen kleiner als der Kreisradius ist, oder mache ich da einen Denkfehler?
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
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
8.378 Beiträge
 
Delphi 10.4 Sydney
 
#10

AW: Punkt in der Schnittmenge dreier Kreise

  Alt 9. Jun 2021, 15:33
oder mache ich da einen Denkfehler?
Nein, machst du nicht. Das deckt sich inhaltlich mit dem unter #3 gesagten.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  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 +2. Es ist jetzt 03:48 Uhr.
Powered by vBulletin® Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf