Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » Java » Herz

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
07.11.2010, 11:59 Uhr
sia



Hallo zusammen,

ich möchte ein Programm schreiben , das mir, nach dem ich eine zahl eingetippt habe, ein Herz auf die Console ausgibt. Obwohl diese Zahl ist die Bereite meiner raute.

Also ich weiss dass ich, um ein Herz ausgeben zu können, eine Raute und 2 Kreise brauche.

den kreis weiss ich wie das geht:


C++:
public static boolean inKreis(double px, double py, double cx, double cy, double r) {
    double x = px-cx;
    double y = py-cy;
    return (r*r > (x*x+y*y));
}

public static void main (String[] args) {

    System.out.println("Bitte geben Sie den Durchmesser an: ");
    int d = IO.readInt();
    double cx = d / 2.0;
    double cy = cx;
    double r = cx;

    for (int y=0; y<=d/2; ++y) {
        for (int x=0; x<=d; ++x) {

            if (!inKreis(x,2.0*y,cx,cy,r)) {
                System.out.print(" ");
            } else if (!inKreis(x,2.0*y,cx,cy,2.0/3.0*r)) {
                System.out.print("O");
            } else if (!inKreis(x,2.0*y,cx,cy, 1.0/3.0*r)) {
                System.out.print("#");
            } else {
                System.out.print("O");
            }

        }
        System.out.println();
    }

}

}



Ich weiss aber net wie ich die Raute aus geben soll.
kann mir einer dabei helfen?
THX

Dieser Post wurde am 16.11.2010 um 21:22 Uhr von FloSoft editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
07.11.2010, 17:32 Uhr
~Lensflare
Gast


Hi.

Das ist relativ einfach. Du musst prüfen ob x innerhalb der breite der raute liegt und je weiter man sich in der höhe vom mittelpunkt entfernt, desto kleiner muss diese vorgegebene breite werden, wo der punkt drin liegen muss.

public static boolean inRaute(double px, double py, double cx, double cy, double r) {
double x = px - cx;
double y = py - cy;
return Math.abs(x) < r - Math.abs(y);
}

Ich hab hier die selbe signatur genommen wie bei deiner kreis methode. r ist die halbe breite der raute.


@admins:
Wenn ich mich einlogge und dann durch die seite navigiere, muss ich mich neu einloggen. deswegen kann ich nicht eingeloggt posten. Ich weiss zwar dass es da gerade probleme gibt, aber "sia" konnte auch eingeloggt posten
Vielleicht wurde das problem nicht vollständig gelöst.
Cookies sind bei mir aktiv.
Danke.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
07.11.2010, 21:22 Uhr
Hans
Library Walker
(Operator)


Hi,

@Lensflare: Du solltest beim einloggen auch angeben, das Du Dich per Cookie einloggen willst. Standardeinstellung ist ja Session-login, und das klappt zur Zeit nicht.

Hans
--
Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung.

Dieser Post wurde am 08.11.2010 um 03:58 Uhr von Hans editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
07.11.2010, 21:38 Uhr
Lensflare



ah, das habe ich übersehen. danke
--
Wenn das Gehirn so einfach wäre, dass wir es verstehen könnten, wären wir so einfach, dass wir es nicht verstehen könnten.
(Emerson Pugh Trost)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
08.11.2010, 18:10 Uhr
sia



HI,

ich hab das schon selber hin gekriegt aber danke trotzdem.
wer sich mien code angucken will ::



C++:
public class Herz
{
    public static boolean inRaute (double px, double py, double cx, double cy, double b)
    {
        double raute1 = px - cx;
        double raute2 = py - cy;
    
        double b1 = Math.abs(raute1);
        double b2 = Math.abs(raute2);
        
        double end = b1+b2;
        
        if (end >b)
            return false;
        else
            return true;
    }
    
    public static boolean inHerz(double px, double py, double cx, double cy, double b)
    {
        double raute1 = px-cx;
        double raute2 = py-cy;
        
        double betrag1 = Math.abs(raute1);
        double betrag2 = Math.abs(raute2);
        
        double inRaute = betrag1+betrag2;
        
        
        double Mittelx1 = cx-b/2;
        double Mittely1 = cy-b/2;
        double Mittelx2 = cx+b/2;
        double Mittely2 = cy-b/2;

    
        double vx1 = px-Mittelx1;
        double vy1 = Mittely1-py;
        double vx2 = px-Mittelx2;
        double vy2 = Mittely2-py;
    
        
        double radius = b/Math.sqrt(2);
        
        if (inRaute<= b || Math.sqrt(vx1*vx1+vy1*vy1)<=radius||Math.sqrt(vx2*vx2+vy2*vy2) <=radius )
            return true;
        else
            return false;
        
    }
    
    
    
    public static void main (String [] args)
    {
        
        System.out.println(inHerz(3.78, 2, 2, 2, 1.5));
        
        System.out.println("Durchmesser");
        int Durchmesser = IO.readInt();
        double r = Durchmesser*0.4;
        
        double Mittelpunktx = (r/Math.sqrt(2))+(r/2);
        double Mittelpunkty = (r/Math.sqrt(2))+(r/2);
    
        
        for (int i = 0; i<=Durchmesser; i++)
        {
            for (int j = 0; j<=Durchmesser; j++)
            {
                if (inHerz(j, 2*i, Mittelpunktx,2*Mittelpunkty, r))
                    System.out.print("#");
                else
                    System.out.print(" ");
            }
            
            System.out.println();
        }
        
        
    }
}


Dieser Post wurde am 16.11.2010 um 21:22 Uhr von FloSoft editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
08.11.2010, 20:26 Uhr
0xdeadbeef
Gott
(Operator)


Schlage Folgendes vor (Implementation hingekladdet):

C++:
class heart {
    public static double calc_r(double t) {
        return (1 - Math.abs(t)) * (1 + 3 * Math.abs(t));
    }

    public static void main(String[] args) {
        char[][] buffer = new char[dim + 1][dim + 1];

        for(int i = 0; i <= dim; ++i) {
            for(int j = 0; j <= dim; ++j) {
                buffer[i][j] = ' ';
            }
        }

        double r, t, eps = 1. / 1024;
        double min_x = 0.0,
               min_y = 0.0,
               max_x = 0.0,
               max_y = 0.0;

        for(t = -1.0; t <= 1.0; t += eps) {
            r = calc_r(t);

            double x = r * Math.cos(t);
            double y = r * Math.sin(t);

            min_x = Math.min(x, min_x);
            min_y = Math.min(y, min_y);
            max_x = Math.max(x, max_x);
            max_y = Math.max(y, max_y);
        }

        for(t = -1.0; t <= 1.0; t += eps) {
            r = calc_r(t);

            double x = r * Math.cos(t);
            double y = r * Math.sin(t);

            int ix = (int) ((x - min_x) / (max_x - min_x) * dim);
            int iy = (int) ((y - min_y) / (max_y - min_y) * dim);

            buffer[ix][iy] = '*';
        }

        for(int i = dim; i >= 0; --i) {
            System.out.println(buffer[i]);
        }
    }

    private final static int dim = 50;
}


--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra

Dieser Post wurde am 08.11.2010 um 20:27 Uhr von 0xdeadbeef editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ Java ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: