001
21.11.2005, 09:53 Uhr
imhotep
followed the white rabbit
|
Im Prinzip musst du doch nur testen, ob ein Punkt in einem Viertelkreis liegt und kannst dann Aussagen treffen über die anderen Viertelkreise, in dem du einfach die Vorzeichen der Koordinaten vertauschst. Wenn nun also der Punkt (1;2) im Viertelkreis ist, so ist auch (-1;2), (-1;-2) und (1;-2) im Kreis. (Genau genommen reicht es sogar nur einen Achtelkreis zu testen und dann x und y zu vertauschen)
Was du machen kannst ist eine Art Füllungsungsproblem. Was du ja auch schon angedacht hast. Einfach zu testen ob der Punkt drin ist, wenn ja den Nachbarn sich testen lassen.
Deine Ausgabe ist aber noch nicht ganz richtig, weil du musst nicht das Ergebnis von jein ausgeben, sondern immer, wenn du einen Punkt gefunden hast.
C++: |
#include <cstdlib> #include <iostream> #include "cond.h"
using namespace std; int n; // wozu ist der gut?
int kreistest ( int x, int y, int radius) // nur testen, nix mit Rekursion { cond(x*x+y*y<=radius*radius, return 1, return 0); }
void ausgabe (x, y) //Ausgabe der Koordinatenvarianten { cout << x << "," << y << ", "; cout << x << "," << -y << ", "; cout << -x << "," << y << ", "; cout << -x << "," << -y << endl; }
int jein (int x, int y, int radius) // die eigentliche Rekursive Funktion { if ( x <= radius ) //Abbruchbedingung cond (kreistest(x, y, radius) == 1, // test ob im Kreis (ausgabe(x,y), jein(x, y++, radius) ), //wenn ja, x&y ausgeben und weiter jein(x++,0,radius)); //wenn nicht neue Zeile }
int main(int argc, char *argv[]) { cout << "Koordinaten sind: "; jein(0,0,4); // Initalisierung system("PAUSE"); return EXIT_SUCCESS; }
|
Hab die jetzt nicht auf Funktion getestet, aber hoffe das hilt. |