Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > General Coding
You last visited: Today at 00:13

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



Brauche Hilfe bei Prog. Aufgabe

Discussion on Brauche Hilfe bei Prog. Aufgabe within the General Coding forum part of the Coders Den category.

Reply
 
Old   #1
 
elite*gold: 100
Join Date: Nov 2014
Posts: 62
Received Thanks: 30
Question Brauche Hilfe bei Prog. Aufgabe

Hallo,
ich brauche dringend Hilfe bei meinem Prog. Hausaufgabe und ich hab bis jetzt keinen Plan wie ich es umsetzen kann.

Die Aufgabe lautet:

Schnittpunkte von Geraden bestimmen
Schreiben Sie eine Funktion, die alle Schnittpunkte einer Menge von Geradensegmenten bestimmen. Wenn Sie ein Verfahren finden, das besser funktioniert als einfache jede Gerade mit jeder anderen zu vergleichen, sind Extrapunkte drin.

Hinweise
Verwenden Sie diese Klassen:


Code:
public struct Punkt {
	public double X;
	public double Y;
}
[public struct GeradenSegment {
	public Punkt Start;
	public Punkt End;

	public List<Punkt> Schnittpunkte(List<GeradenSegment> segmente){
	...
	}
}
Wäre echt dankbar wenn mir jemand das genauer erklärt oder sogar es löst
Coolsalx is offline  
Old 10/28/2018, 15:25   #2
 
elite*gold: 100
Join Date: Apr 2008
Posts: 860
Received Thanks: 1,465
Shit ich glaub ich habs falsch verstanden. Falls ein Geradensegment eine Strecke sein soll, ist mein Ansatz unvollständig..

Ansonsten hier weiter lesen:
Zum Einstieg ein bischen Mathe:

Lagebeziehung von Geraden (Ausschnitt)

Definition: Zwei Geraden haben nur dann einen Schnittpunkt, wenn die Steigung beider Geraden unterschiedlich ist.

Beispiel:
Code:
y1 = 4x + 5
y2 = 4x + 2
// Kein Schnittpunkt

y3 = 4x + 5
y4 = 1x + 2
// Schnittpunkt
Als Code:
Code:
if (m1 != m2)
    Console.WriteLine("Schnittpunkt vorhanden");
else
    Console.WriteLine("KEIN Schnittpunkt vorhanden");
Das stellt uns nun vor das Problem: Wie bekommen wir denn die Steigung der Geraden?

Gerade durch zwei Punkte

Gegeben:
Zwei Punkte: A(4, 5) und B(6, 9)

Gesucht:
Geradengleichung der Form
Code:
y = m * x + b
aus A und B

An dieser Stelle könnten wir ein Gleichungssystem lösen, wir könnens aber auch lassen.

Code:
dy = b_y - a_y
dx = b_x - a_x

m = dy / dx
Gelöst wäre das also

Code:
dy = 9 - 5 = 4
dx = 6 - 4 = 2

m = 4 / 2 = 2
Nun haben wir die Steigung einer Geraden. Bleibt noch die Verschiebung b:

Dazu setzen wir einfach alles in die Normalform ein, was wir bisher haben:

Code:
y = m * x + b

5 = 2 * 4 + b

// Nach b auflösen
5 = 8 + b
5 - 8 = b
-3 = b
Wenn wir das nun in ein Programm übersetzen wollen, müssen wir es generisch lösen. d.H. wir müssen die Formel nach b umstellen, aber nur mit Variablen.

Und das sieht dann so aus:
Code:
y = m*x + b
y - m * x = b
Schnittpunkt zweiter Geraden berechnen
Definition: Der Schnittpunkt zweier Geraden ist genau der Punkt, an dem beide Funktionen den gleichen Y-Wert besitzten.

Wir haben also zwei Funktionen
Code:
y1 = 4x + 5
y2 = 1x + 2
Und wenn sich folgendes ergibt, ist der Schnittpunkt gefunden:
Code:
y1 = y2
4x + 5 = 1x + 2
Gesucht ist hier der passende X-Wert. Also stellen wir nach X um.
Code:
4x + 5 = 1x + 2      | -1x
3x + 5 = 2           | -5
3x     = -3          | :3
x      = -1
Wie man das Ganze generisch umstellt, habe ich ja oben schon gezeigt, daher solltest du das hier eigentlich hinbekommen. Ansonsten: Schreib auf was du denkst und ich (oder jemand anderes) korrigiere das.

Jetzt haben wir unseren X-Wert, den können wir jetzt in eine der beiden Geradengleichungen einsetzen und bekommen den passenden Y-Wert.

Code:
4x + 5 mit x = -1
4 * -1 + 5 = 1
// oder
1x + 2 mit x = -1
1 * -1 + 2 = 1
Die "große" Kunst ist nun, das ganze in ein Programm zu übersetzen. Generell musst du dazu alles generisch lösen, du kannst ja im Programm nicht umstellen ... also kannst du schon ... aber das müsstest du dann programmieren.

Wie dir vielleicht aufgefallen ist, lässt sich fast alles nur mit den Parametern M und B lösen. Schritt eins ist also diese beiden Parameter zu bestimmen und Schritt zwei dann diese in die jeweiligen Formeln einzusetzen.

Ich hab mit Absicht nicht die gesamte Lösung als Code hingeschrieben. Wenn du Probleme bei der Umsetzung hast, schreib am Besten ganz genau was du versucht hast und was deine Gedanken dahinter waren bzw was dein Problem ist. Ich muss sagen ich find die Aufgabe schon recht hart für ne Programmieren Hausaufgabe. Da sind selbst unsere Aufgaben in der Uni einfacher.

(Und wenn du kein Interesse mehr am selbst lösen hast, sondern lieber die ganze Lösung willst, schreib das auch klar hin ;D ).

Vielleicht geh ich das ganze auch viel zu komplex an. Vielleicht hat C# schon Funktionen für sowas?
florian0 is offline  
Thanks
1 User
Old 10/28/2018, 15:46   #3
 
elite*gold: 100
Join Date: Nov 2014
Posts: 62
Received Thanks: 30
Also vielen Dank erstmal. Ich habe eigentlich schon ein Programm geschrieben mit dem man Schnittpunkte zweier Geraden berechnen kann.

Code:
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Schnittpunkte berechnen:");
            Console.WriteLine("Unsere Geradenfunktion sieht so aus: y=mx+b");
            Console.WriteLine("Bitte geben Sie dementsprechend auch ihre Werte nach dieser Funktion ein!");
            Console.WriteLine("Bitte geben Sie nun Ihre Werte ein für Ihr: B1, B2, M1, M2");
            double b1 = double.Parse(Console.ReadLine(), NumberStyles.Any, CultureInfo.InvariantCulture);
            double b2 = double.Parse(Console.ReadLine(), NumberStyles.Any, CultureInfo.InvariantCulture);
            double m1 = double.Parse(Console.ReadLine(), NumberStyles.Any, CultureInfo.InvariantCulture);
            double m2 = double.Parse(Console.ReadLine(), NumberStyles.Any, CultureInfo.InvariantCulture);

            Console.WriteLine("Ihr Schnittpunkt wird berechnet..");

            var x = Convert.ToDouble((b2 - b1) / (m1 - m2));
            var y = Convert.ToDouble(m1 * (b2 - b1) / (m1 - m2) + b1);

            Console.WriteLine("Ihr X ist: " + x);
            Console.WriteLine("Ihr Y ist: " + y);
            Console.ReadLine();
Doch das Problem ist ich hab keinen Plan wie ich das in eine Funktion schreibe und dazu noch eine List mit Schnittpunkten und "Geradensegment". Wenn jemand mehr Durchblick würde ich mich über eine Lösung/Code freuen
Coolsalx is offline  
Old 10/28/2018, 21:22   #4
 
elite*gold: 100
Join Date: Apr 2008
Posts: 860
Received Thanks: 1,465
Naja die Idee ist, dass du eine Liste aus Geradensegmenten hast. Über die Möglichkeit der Eingabe würde ich mir erstmal keine Gedanken machen, das kann man später noch lösen. Erstmal muss die Logik gehen und dazu kann man Werte auch einfach statisch in den Quellcode schreiben.

Code:
List<GeradenSegment> segmente;

segmente.Add(new GeradenSegment(4, 5, 3, 2);
segmente.Add(new GeradenSegment(3, 2, 4, 5);
segmente.Add(new GeradenSegment(11, 6, 15, 9);
// ...
Nun sollst du die Liste durchgehen, und die Funktion Schnittpunkte aufrufen. Die Funktion ist Teil der Klasse GeradenSegment, das sieht man ja in deinem Codebeispiel im ersten Post. Verglichen werden sollen, meines Erachtens, erstmal alle anderen Geradensegmente.

Code:
foreach (GeradenSegment seg in segmente)
{
    // Schnittpunkte bestimmen
    List<Punkt> punkte = seg.Schnittpunkte(segmente);

    // Schnittpunkte ausgeben (temporär zum Testen, könnte später auch anders aussehen)
    foreach(Punkt p in punkte)
        Console.WriteLine("Schnittpunkt bei {0}|{1}", p.X, p.Y);
}
Nun sollst du zu den Punkten anhand der X und Y Werte die Geradengleichung konstruieren, aka. M und B finden. Dann funktioniert dein bereits geschriebener Code.

Ich weiß immer noch nicht was ein Geradensegment ist. Mein Vorschlag oben gilt für "normale" Geraden. Falls es sich bei Geradensegmenten um einfache Strecken handelt müsste man vorher oder nachher noch prüfen ob sich die beiden Strecken überhaupt berühren. Aber auch dazu gibt es sicherlich mathematische Formeln die man umsetzen kann.
florian0 is offline  
Reply


Similar Threads Similar Threads
Hilfe bei einen Prog
09/14/2013 - General Coding - 11 Replies
Kann mir wer erklären was decompiliers ist und kann mir wer ein prog decompiliers XD Habe nur ein Uplay acc mit Far cry 3 den ich jemanden geben würde der mir das machen würde Mfg PADDI
Brauche Hilfe Bei Auto Haus aufgabe.
02/19/2012 - elite*gold Trading - 0 Replies
Die Aufgabe: Der Opa will Christian seinen Kleinwagen schenken. Der Pkw hat Typklasse 15 und verbraucht 7 Liter/100 km Superbenzin E 10. 1. Finde heraus, welche festen Kosten für das Fahrzeug anfallen. Von welchen Faktoren hängen die Höhe der Beiträge ab? Worum geht es eig. hier geht es um einen Haushaltsplan,
Hilfe bei einer Java Aufgabe
11/11/2006 - General Coding - 4 Replies
Denke mal hier kennen sich auch ein paar mit dem programmieren einer Java Aufgabe aus ;) Komme leider an einer stelle nicht weiter, daher versuch ich es mal hier public class hallo { public static void main&#40;String&#91;&#93; args&#41; { TextIO.putln&#40;&#34;Bitte geben sie einen der folgenden Laendercodes ein&#58; A=Austria, D=Deutschland, F=Frankreich, G=Groábritanien I=Italien oder M=Malle&#34;&#41;;



All times are GMT +2. The time now is 00:13.


Powered by vBulletin®
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2024 elitepvpers All Rights Reserved.