Programm zur Überprüfung, ob ein punkt dem Kreis gehört



  • Hallo,

    ich bin dabei ein Programm zu schreiben, das in der Lage ist zu überprüfen ob ein punkt einem Kreis gehört oder nicht.
    Mein Programm liefert leider nicht das Ergebnis, was ich mir wünsche. Hier eine kleine Ausschnitt aus meiner Programmcode. Vielleicht kann mir jemand helfen.

    danke!!

    //Eine grosse Menge der Punkte, Punktanzahl num
    double Kreis(Point *points, int num)
    {
    	//Teile der Punktmenge
    	int n = num / 20;    
    
    	for (int k = 1; k < num; k += 20)
    	{
    		//Berechene euckl_abst zwischen alle 20 punkten
    
    		double euckl_dist = dist(points[k+20], points[k]);
    
    		//Koordinaten des mittelpunkts berechnen
    		CPoint center = (points[k+20]-points[k]) / 2;
    
    		//gehe innerhalb dieser 20 punkte und überprüfe, ob der Punkt point[i] dem Kreis gehört.  
    		for (int i = 1; i < k; i ++)
    		{			
    			double points_dist = dist(center, points[i]);
    			if( points_dist <= euckl_dist ) 
    			{
    				std::cout << "Point liegt innerhalb oder auf Kreis" << '\n';
    			}
    			else
    			{
    				std:: cout << "außerhalb der kreis" << '\n';
    			}
    
    		}	
    	} 
    }
    

  • Mod

    1. "Entspricht nicht meinen Erwartungen" ist keine Fehlerbeschreibung. Erst recht nicht, wenn du nicht sagst, was du erwartest.

    2. Aus deinem Code werde ich daher auch nicht schlau. Mit einer Prüfung ob ein Punkt in einem Kreis liegt, hat dein Algorithmus jedenfalls nur am Rande zu tun.

    3. Ein Pseudocodealgorithmus um zu prüfen ob ein Punkt im Kreis liegt:

    bool PunktImKreis(punkt p, punkt mittelpunkt, float radius){
      return (dist(punkt,mittelpunkt) < r);
    }
    

    Da dies aber wie man sieht, fast gar nichts mit deinem Code zu tun hat, nehme ich an, dass du eigentlich etwas anderes machen wolltest.



  • SeppJ schrieb:

    bool PunktImKreis(punkt p, punkt mittelpunkt, float radius){
      return (dist(punkt,mittelpunkt) < r);
    }
    

    Nur damit es zu keinen Missverständnissen kommt eine kleine Verbesserung deines Pseudo-Codes:

    bool PunktImKreis(punkt p, punkt mittelpunkt, float radius){
      return (dist(p,mittelpunkt) < r);
    }
    

    MfG

    //Edit:
    Das Problem bei diesem Pseudecode ist allerdings, dass ein bekannter Kreis vorrausgesetzt wird. Das ist, sofern ich den Ursprungscode richtig interpretieren, aber nicht der Fall. Dort hat er eine Reihe von Punkten, von denen einige einen Kreis ergeben, andere jedoch außerhalb oder innerhalb dieses Kreises liegen. Oder missverstehe ich da etwas?


  • Mod

    Eichboson schrieb:

    //Edit:
    Das Problem bei diesem Pseudecode ist allerdings, dass ein bekannter Kreis vorrausgesetzt wird. Das ist, sofern ich den Ursprungscode richtig interpretieren, aber nicht der Fall. Dort hat er eine Reihe von Punkten, von denen einige einen Kreis ergeben, andere jedoch außerhalb oder innerhalb dieses Kreises liegen. Oder missverstehe ich da etwas?

    Ja, das glaube ich auch. Da er aber nur schreibt 'Punkt im Kreis', können wir leider nur diese Frage beantworten. Spekulationen was der Code genau machen soll, halte ich für gewagt, besonders wenn da schon so magische Zahlen wie die 20 auftauchen. Danke übrigens für die Korrektur!



  • Eichboson schrieb:

    Nur damit es zu keinen Missverständnissen kommt eine kleine Verbesserung deines Pseudo-Codes

    Ich würde den Code sogar noch weiter verbessern, indem ich die Quadrate der Distanzen und nicht die Distanzen selbst vergleiche. So kann man sich das verhältnismässig teure Wurzelziehen sparen... 🙂



  • hallo!
    ich bin neu hier und das programmieren ist auch neu für mich.. ich möchte gern bzw muss ich ein programm schreiben dass überprüft ob ein punkt innerhalb außerhalb oder auf einer ellipse liegt (mit einer eigenen Methode namens lage)! im allgemeinen versteh ich die aufgabe ja aber mit dem umsetzten habe ich noch so meine probleme! nun mein programm sieht bis jetzt so aus:

    import javax.swing.JOptionPane;

    public class EllipseMethode{

    public static void main(String args []){

    //Deklaration
    double a, b, x, y;

    String eingabe_halbachsenlaenge_a, eingabe_halbachsenlaenge_b, eingabe_punkt;

    String eingabe_koordinate_x, eingabe_koordinate_y;

    //Eingabe
    eingabe_halbachsenlaenge_a = JOptionPane.showInputDialog(null, " Eingabe der Halbachsenlaenge a: ");

    eingabe_halbachsenlaenge_b = JOptionPane.showInputDialog(null, " Eingabe der Halbachsenlaenge b: ");

    eingabe_koordinate_x = JOptionPane.showInputDialog(null, " Eingabe der x-Koordinate vom Punkt A: ");

    eingabe_koordinate_y = JOptionPane.showInputDialog(null, " Eingabe der y-Koordinate vom Punkt A: ");

    //Umwandeln
    a = Double.parseDouble(eingabe_halbachsenlaenge_a);

    b = Double.parseDouble(eingabe_halbachsenlaenge_b);

    x = Double.parseDouble(eingabe_koordinate_x);

    y = Double.parseDouble(eingabe_koordinate_y);

    //Erstellen der Ausgabe als String
    JOptionPane.showMessageDialog(null, "Der Punkt ( "+ x + " / " + y + ") liegt " + lage(a,b,x,y));

    }//Ende der main Methode

    //Beginn der Methode lage
    //Die Methode soll überprüfen ob der eingegeben Punkt
    //innerhalb, außerhalb oder auf der Ellipse liegt
    public boolean lage(double a, double b, double x, double y)
    {
    double m_x = 0, m_y = 0, k;

    k = (((x - m_x)(x - m_x))/(a*a)) + (((y - m_y)*(y - m_y))/(bb));

    if(k<=1){

    return true;

    }
    else{
    if(k>=1){

    return false;

    }

    }//Ende der if-Schleife

    }//Ende der Methode lage

    }

    der mittelpunkt ist mit (0/0) gegeben! die halbachsenlängen a und b sind über ein eingabedialog einzugeben und die koordinaten des zu überprüfenden punktes ebenfalls!

    ich hab keine ahnung was ich in der methode lage machen muss! ich hab gelesen dass man mein problem eventuell mit tru oder false also mit boolean lösen könnte? stimmt das? ich verstehe nie genau was ich dann an die methode main zurück geben muss, also was mein rückgabewert ist und wass ich dann beim methodenaufruf in die klammer schreiben muss!

    ich hoffe irgendjemand kann mir ein wenig weiter helfen! wäre sehr dankbar!!!!

    LG



  • Das ist Java, nicht C++.



  • Auch wenn du im falschen Forum bist ist dein Problem eher weniger Programmiertechnisch, oder?

    Schau dir am besten mal das hier an:
    http://de.wikipedia.org/wiki/Ellipse

    Überleg, wie dus auf Blatt machen würdest und dann programmier das.


Anmelden zum Antworten