WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Tangente an zwei Kreise anlegen

 

AS02
Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 09.12.20
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.12.2020, 11:51     Titel: Tangente an zwei Kreise anlegen
  Antworten mit Zitat      
Hi,
ich habe hier ein Projekt, an dem ich jetzt schon 2 Tage sitze und an einer stelle einfach nicht weiterkomme.
Es geht darum, dass ich zwei Kreise habe. Der eine von diesen (Kreis1) soll fest an seiner Position bleiben und der zweite sich auf einer weiteren Kreisbahn mit einem gewissen Radius um den Kreis 1 bewegen können. Bis dahin Funktioniert mein Programm auch.
Anschließend soll Eine Tangente an beiden Kreisen anliegen. Das Ganze soll dann so ähnlich aussehen wie unten. Allerdings soll die Tangente an beide Kreise anliegen.
Kann mir da eventuell jemand weiterhelfen?
Vielen Dank schonmal im Voraus

MfG AS02

Kreise mit Tangente.fig
 Beschreibung:

Download
 Dateiname:  Kreise mit Tangente.fig
 Dateigröße:  55.07 KB
 Heruntergeladen:  153 mal
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 09.12.2020, 12:48     Titel:
  Antworten mit Zitat      
Hallo,

für mich ist das in erster Linie ein Geometrieproblem. Ich würde es wie folgt versuchen:
* Ziehe eine Linie von den Kreismittelpunkten zu den Schnittpunkten mit der (gedachten) Tangente. Verbinde zudem die Kreismittelpunkte. Es bilden sich zwei Dreiecke.
* Die Winkel an den Kreismittelpunkte müssen gleich sein, also gilt
cos(alpha) = r1 / hypotenuse1 = r2 / hypotenuse2, und damit sind natürlich auch die Kehrwerte gleich.
* Andererseits entspricht aber hypotenuse1 + hypotenuse2 der Entfernung der Kreismittelpunkte entf, d.h.
hypotenuse1 / r1 = (entf - hypotenuse1) / r2
Das kannst du jetzt nach hypotenuse1 auflösen.
* Damit kannst du den Berührpunkt der Dreiecke, also einen Punkt auf der Tangente berechnen.
* Zudem kannst du über
sin(beta) = r1/hypotenuse1
den Steigungswinkel der Tangente berechnen.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
AS02
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 09.12.20
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.12.2020, 15:01     Titel:
  Antworten mit Zitat      
Hallo Harald,
danke schonmal für deine Antwort.
Nur eine Frage bleibt mir noch, an der es vorher auch hin. Die Tangente ist abhängig von zwei Berührpunkten, welche auch wiederum von der Position des 2. Kreises und von sich gegenseitig abhängig sind.

Code:

function [] = Radiusberechnung()
Eingabewinkel=input('Geben Sie einen Winkel ein);      

r2=25;
r3=25;
r4= 78.1;                          

Mittelpunkt2 = [50 60];
theta=[0:(2*pi)/360:2*pi];        
                               
x4=r4*cos(theta)+Mittelpunkt2(1);               %Kreisbahn
y4=r4*sin(theta)+Mittelpunkt2(2);              

Winkel0= 360-50;

if Eingabewinkel<=50
    Winkel= Winkel0 + Eingabewinkel;
else
    Diff= Eingabewinkel-50;
    Winkel= Diff;

   
   
end  
x3=r3*cos(theta)+x4(Winkel);                %Kreis2
y3=r3*sin(theta)+y4(Winkel);          


x2=r2*cos(theta)+Mittelpunkt2(1);           %Kreis1
y2=r2*sin(theta)+Mittelpunkt2(2);            


Ableitungx = -r3*sin(theta);                %Steigung der Tangente an Auslegerrolle                    
Ableitungy =  r3*cos(theta);                                    
m1 = Ableitungy./Ableitungx;

Ableitungx2 = -r2*sin(theta);               %Steigung der Tangente an Antriebsrolle                    
Ableitungy2 =  r2*cos(theta);                                    
m2 = Ableitungy2./Ableitungx2;

M=180;
N=360;

Punkt1= [x3(M) y3(M)];                      %Punke an dem Tangente anliegt
Punkt2= [x2(N) y2(N)];

c = Punkt1(2) - m1(M).*Punkt1(1);
c2= Punkt2(2)-  m1(N).*Punkt2(1);

xc = Punkt1(1)-100:Punkt1(1)+100;
xc2= Punkt2(1)-100:Punkt2(1)+100;
                                 
Tangente = m1(N).*xc+c;                                            %nach Tnagente=m*x+c
 



Das War zunächst das Programm dass ich bisher geschrieben hatte. Die Schleife mit der Winkelberechnung hat was mit der späteren Anwendung zu tun.
Allerdings sind die Berührpunkte von N und M abhängig, die manuell eingegeben werden müssen. Kann ich vielleicht eine Schleife die Eingabe von N und M übernehme? Also dass N und M so gewählt werden, dass die Punkte, die von diesen wiederum abhängig sind die gleiche Tangentensteigung besitzen?
Ich weiß, dass kling kompliziert, aber im Grunde geht es darum, dass sich der Kreis2 bewegen soll und für jede Position eine Tangente bestimmt werden soll, die beide Kreise berührt.

Danke Smile
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 09.12.2020, 17:48     Titel:
  Antworten mit Zitat      
Hallo,

ich kann deinen Ansatz nicht recht nachvollziehen. Natürlich kannst du die möglichen m1 und m2 ausrechnen, aber es reicht ja nicht, dass die Tangenten parallel sind.

Mein Ansatz sollte das von dir beschriebene Problem lösen. Zur Verdeutlichung habe ich die Dreiecke mal in deine Figure eingetragen.

Grüße,
Harald

triangles.png
 Beschreibung:

Download
 Dateiname:  triangles.png
 Dateigröße:  45.43 KB
 Heruntergeladen:  132 mal

_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
AS02
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 09.12.20
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.12.2020, 18:15     Titel:
  Antworten mit Zitat      
Vielen Dank dir Harald!
ja, das mit dem m1 und m2 war noch von einem vorherigen Ansatz.
Danke für deinen, find ich deutlich einfacher. Very Happy
Kurze Frage dazu noch: Wie komme ich auf die Punkte der gedachten Tangente?
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 09.12.2020, 19:14     Titel:
  Antworten mit Zitat      
Hallo,

das Bild dient nur der Illustration, die Punkte sind "optisch geschätzt".
Um einen Punkt auf der Tangente (z.B. den Berührungspunkt der Dreiecke) und ihre Steigung zu bekommen, würde ich eben die ganzen Schritte der Reihe nach durchgehen.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
AS02
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 09.12.20
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.12.2020, 11:45     Titel:
  Antworten mit Zitat      
Hallo Harald,

habe deinen Ansatz mal probiert und was soll ich sagen Laughing
Es Funktioniert.
Musste den Winkel alpha noch von der Position des Kreises machen, aber funktioniert.

Falls jemand das ganze jemand für die Zukunft braucht:
Code:

function [] = Tangente_an_zwei_Kreisen()

Staerke= input('Geben Sie die Stärke ihres Materials an: ');

Eingabewinkel=input('Eingabewinkel: ');
r2=25+Staerke;
r3=25;
r4= 78.1;                          

Mittelpunkt2 = [50 60];
theta=(0:(2*pi)/360:2*pi);        
gamma=(0:(2*pi)/360:2*pi);

x4=r4*cos(gamma)+Mittelpunkt2(1);              
y4=r4*sin(gamma)+Mittelpunkt2(2);              

Winkel0= 360-50;

if Eingabewinkel<=50
    Winkel= Winkel0 + Eingabewinkel;
else
    Diff= Eingabewinkel-50;
    Winkel= Diff;
end
x3=r3*cos(theta)+x4(Winkel);                
y3=r3*sin(theta)+y4(Winkel);          


x2=r2*cos(gamma)+Mittelpunkt2(1);          
y2=r2*sin(gamma)+Mittelpunkt2(2);

Entfernung=r4;
if Eingabewinkel==50
    omega=0;
end
if Eingabewinkel > 50
    omega= -Winkel;
   
end
if Eingabewinkel<50
    omega = 360-Winkel;
end  
   
Hypothenuse1= Entfernung/(1+(r3/r2));
alpha=acosd(r2/Hypothenuse1)-omega;

M1=270+alpha;
M2=floor(M1);
N1=90+alpha;
N2=floor(N1);

Punkt2=[x2(M2) y2(M2)];
Punkt3=[x3(N2) y3(N2)];





plot(x3,y3)

hold on
plot([0;x4(Winkel)], [0;y4(Winkel)])
hold on
plot([x4(Winkel);Punkt3(1)], [y4(Winkel);Punkt3(2)])
hold on
plot([Mittelpunkt2(1);x4(Winkel)], [Mittelpunkt2(2);y4(Winkel)])
hold on
plot([Mittelpunkt2(1);Punkt2(1)], [Mittelpunkt2(2);Punkt2(2)])
hold on
plot([Punkt2(1);Punkt3(1)], [Punkt2(2); Punkt3(2)])
axis equal        
plot(x4,y4)                            
hold on
plot(x2,y2)

end
 


Vielen vielen Dank dir

MfG
AS02
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2024 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.