AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Schnittpunkt zweier Halbkreise berechnen?
Thema durchsuchen
Ansicht
Themen-Optionen

Schnittpunkt zweier Halbkreise berechnen?

Ein Thema von Chaismo · begonnen am 27. Jun 2007 · letzter Beitrag vom 28. Jun 2007
Antwort Antwort
Chaismo

Registriert seit: 2. Apr 2007
Ort: Dresden
63 Beiträge
 
Delphi 7 Personal
 
#1

Schnittpunkt zweier Halbkreise berechnen?

  Alt 27. Jun 2007, 19:39
Hallöchen!
Ich schreibe gerade ein Programm für Physik, mit welchen man Interferenzbilder darstellen lassen kann.
Nun würde ich aber gern wissen wie man den Schnittpunkt von zwei Halbkreisen berechnen kann?!
Weiteres Problem ist, dass es an jedem Halbkreis VIELE Schnittpunkte gibt...
...als Nebenfrage würd ich gern wissen ob ich diese ganze Function in nem zwischenbild speichern kann
damit dieses Flackern auf der PaintBox verschwindet...aber das ganze als TImage funzt net...
Und damit ihr ma wisst wies im Moment aussieht hier erstma der Code...
Delphi-Quellcode:
function malen:Boolean;
var mx,my,i,r,l:Integer;
begin
Form1.PaintBox1.Repaint;
mx:=Form1.Panel1.Width;
my:=Form1.Paintbox1.Height;
r:=Form1.WL.value;
Form1.PaintBox1.Canvas.Pen.Width:=1;
Form1.PaintBox1.Canvas.Pen.Color:=clblue;
l:=1;
Repeat
Form1.PaintBox1.canvas.MoveTo(mx+r, my);
For i:= 0 to 180 do
  begin
  Form1.PaintBox1.canvas.LineTo(round(mx+r*cos(i*Pi/180)),round(my-r*sin(i*Pi/180)));
  end;
l:=l+1;
r:=Form1.WL.Value*l;
Until r>600;
mx:=Form1.Panel1.Width+Form1.Panel2.width;
my:=Form1.Paintbox1.Height;
r:=Form1.WL.value;
Form1.PaintBox1.Canvas.Pen.Width:=1;
Form1.PaintBox1.Canvas.Pen.Color:=clblue;
l:=1;
Repeat
Form1.PaintBox1.canvas.MoveTo(mx+r, my);
For i:= 0 to 180 do
  begin
  Form1.PaintBox1.canvas.LineTo(round(mx+r*cos(i*Pi/180)),round(my-r*sin(i*Pi/180)));
  end;
l:=l+1;
r:=Form1.WL.Value*l;
Until r>600;
Schonmal Danke im voraus!
Martin Seeler
  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
 
#2

Re: Schnittpunkt zweier Halbkreise berechnen?

  Alt 27. Jun 2007, 20:04
Also gut, was du brauchst, sind folgende Daten:

Mittelpunkt, Radius, Startwinkel, Endwinkel

Du hast jetzt folgendes Gleichungssystem:
I: x1+cos(alpha1)*r1=x2+cos(alpha2)*r2
II: y1+sin(alpha1)*r1=y2+sin(alpha2)*r2

Das musst du jetzt irgendwie nach alpha1 und alpha2 auflösen.

alpha1=arccos((x2+cos(alpha2)*r2-x1)/r1)
alpha2=arcsin((y2+sin(alpha1)*r2-y1)/r1)

alpha1=arccos((x2+cos(arcsin((y2+sin(alpha1)*r2-y1)/r1))*r2-x1)/r1)

Weiter auflösen schaff ich jetzt gerade leider nicht, vllt. geht mit Additionstheoremen noch was.

(Achja, damit dürftest du die Winkel berechnen können, du musst dann nur noch schauen, ob die in dem Bereich Startwinkel<=alpha<=Endwinkel liegen, wenn ja, dann ist das ein Schnittpunkt)
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
Benutzerbild von Nikolas
Nikolas

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

Re: Schnittpunkt zweier Halbkreise berechnen?

  Alt 28. Jun 2007, 09:01
Wie immer ist hier die Wahl des System und der Darstellung des Kreises wichtig. Sehr viele solcher Probleme sind in manchen Systemen kaum zu lösen und in anderen trivial.
Es sollte klar sein, dass du ein Zentrum in den Ursprung legen kannst und das andere an den Punkt (a,0).

Jetzt hast du einen Kreis x^2+y^2=r_1^2 und einen anderen (x-a)^2+y^2=r_2^2

Jetzt setzt du die zweite Gleichung in die erste ein und hast
x^2 + ((x-a)^2-r_2^2)=r_1^2

Du hast also für eine quadratische Gleichung in x, die schnell zu lösen ist. Zu den Lösungen kannst du dann noch die passenden y-Werte berechnen und bist fertig.

Ist wahrscheinlich etwas schneller als die Version vom Borg.
Erwarte das Beste und bereite dich auf das Schlimmste vor.
  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 09:58 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