Java Ellipse aus Linien zeichnen - Fehler wegen nur ganzzahlig möglichen Winkeln?

Hallo,

ich möchte in Java einen Farbkreis in Form eines Ellipse zeichnen; dafür zeichne ich Linien verschiedener Farben vom Mittelpunkt aus in einem bestimmten Winkel zum Endpunkt, der auf der imaginären Form einer Ellipse liegt. So weit so gut, das funktioniert auch.

Mein Problem allerdings ist, dass die Farbkreis-Ellipse nach dem Zeichnen ganz und gar nicht so aussieht, wie sie aussehen sollte:

Ich vermute, dass es daran liegt, dass die Berechnungen Gleitkommazahlen ergeben, die ich aber ganzzahlig runden muss, damit ich damit das Ende einer Linie als Punkt kennzeichnen kann. Dadurch liegen die Linien womöglich an manchen Stellen aufeinander und an anderen Stellen existieren keine Linien (ist das so?).

Hier der Code zum Definieren der Linien mit Farbe und Index:

Line[] lines = new Line[3*255]; 
int[] color = {255,0,0}; 
for(int i=0; i<3; i++) 
   for(int j=0; j<255; j++){ 
      color[i]--; color[(i+1)%3]++; 
      lines[i*255 + j] = new Line(i*255 + j + 1, new Color(color[0], color[1], color[2])); 
} 

Zeichne ich die Linien mit aufsteigender Länge nebeneinander, funktioniert der Farbübergang so wie geplant - nur die Farbellipse macht Probleme.

Hier der Konstruktor der Line-Klasse (mehr enthält sie mom. noch nicht):

Line(int index, Color color){
	this.index = index;
	this.color = color;
	this.angle = this.index*360./765; //3*255 Farben
    int a = Ellipse.a, b = Ellipse.b;
    double x = (a*b/Math.sqrt(b*b+Math.pow(a*Math.tan(angle), 2))),
           y = x*Math.tan(angle);
    if(angle > 90 && angle < 270) x = -x;
    this.end = new Point((int) x, (int) y);
    this.length = Point.distance(0, 0, end.x, end.y);
}

Die paint-Methode der Frame Klasse (ja, ich programmiere in Swing, die Ellipse ist eher ein quick&dirty-Projekt):

@Override public void paint(Graphics g){
	for(int i=0; i<3*255; i++){ 
       g.setColor(lines[i].color); 
       g.drawLine(m.x, m.y, lines[i].end.x+m.x, lines[i].end.y+m.y); 
    } 
} 

Warum sieht die gezeichnete Ellipse so grausam im Gegensatz zum Dreieck aus und separiert optisch so stark zwischen rot und blau? Woran liegt das bzw. wie kann ich es beheben?

Vielen Dank schon mal im Voraus.

LG

Bild zum Beitrag
Computer, Mathematik, zeichnen, programmieren, Java, Swing, Ellipse
Informatik Java Rechtecke vergleichen?

Ein achsenparalleles Rechteck ist durch die Koordinaten von zwei gegenüberliegenden Eckpunkten P(px, py) und Q(qx, qy) bestimmt. Schreiben Sie ein Java Programm Rectangles, das die Lage zweier gegebener achsenparalleler Rechtecke zueinander in einem Koordinatensystem bestimmt und folgende Fälle unterscheidet:

disjoint

Die Schnittmenge der beiden Rechtecke ist leer, sie haben keinen gemeinsamen Punkt. same Die Lage und Größe beider Rechtecke sind gleich.

contained

Der Durchschnitt der beiden Rechtecke entspricht genau einem der beiden Rechtecke. Alle Punkte des einen Rechtecks sind auch in dem anderen enthalten, aber nicht umgekehrt.

aligned

Der Durchschnitt der beiden Rechtecke ergibt eine Linie. Alle gemeinsamen Punkte liegen auf einer Linie mit einer Länge > 0.

touching

Der Durchschnitt der beiden Rechtecke ergibt einen Punkt. Beide Rechtecke haben genau einen gemeinsamen Punkt.

intersecting

Der Durchschnitt der beiden Rechtecke ergibt ein weiteres Rechteck mit einem Flächeninhalt > 0. Ihr Programm liest acht Argumente von der Kommandozeile ein.

Dies sind die beiden Koordinaten P(px, py) und Q(qx, qy) des ersten Rechtecks sowie die Koordinaten S(sx, sy) und T(tx, ty) des zweiten Rechtecks. Berechnen Sie die Lage der beiden gegebenen Rechtecke zueinander und geben Sie das zugehörige Schlüsselwort entsprechend obiger Liste aus.

Beispiel: Für die beiden Rechtecke P(2, 2), Q(7, 5) und S(3, 4), T(0, 6) liefert der Aufruf

C:\> java Rectangles 2 2 7 5 3 4 0 6

intersecting

Ich möchte es mit if befehl machen habe aber keinen plan wie ich die miteinander vergleichen soll :D

Computer, Schule, programmieren, Java, rechteck, Informatik
Wie kann ich den zerstörten KDE Desktop in Kubuntu wieder reparieren?

Hallo,

ich habe gestern Kubuntu 18.10 installiert auf folgendem System:

Intel Xeon E3-1231 V3 8 GB RAM GPU: NVIDIA GTX 980 Gainward Phantom (Desktop-PC, also kein Notebook)

(habe die NVIDIA Treiber unter "zusätzliche Treiber" installieren lassen nach der frischen Installation)

Gestern nacht aber hat es den Desktop komplett zerschossen. DH nach der Anmeldung war erst mal das Startmenü verschoben. Dann neu gestartet und dann kam gar kein Startmenü mehr, sondern die Taskleiste unten war auch völlig verschoben und nur noch zum Teil sichtbar. Und jetzt geht garnichts mehr .

hab folgende Anleitung durchprobiert, aber leider ohne Erfolg:

https://www.pcwelt.de/ratgeber/KDE-Plasma-5-Zurueck-zu-Standardeinstellungen-9935010.html

Der Desktop ist immernoch zerstört.

An diesen Desktop PC ist nur ein herkömmlicher 23 Zoll Monitor angeschlossen und ich habe diesbezüglich was die Signalausgabe angeht, keine Settings vorgenommen. Einfach nach der Installation von Kubuntu, die NVIDIA Treiber zusätzlich eingefügt unter "Zusätzliche Treiber" und ein paar Programme aus den öffentlichen Packetquellen installiert.

Auf meinem Laptop hatte ich vor einigen Monaten als ich mal Kubuntu darauf probieren wollte, das gleiche Problem. Es war nicht zu benutzen, weil auch da der Desktop ziemlich schnell nach der Installation zerstört war.

Danke

Computer, Technik, Linux, Desktop, programmieren, OS, Programmiersprache, Technologie, Serverprobleme, Spiele und Gaming
Speicherzugriffsfehler in Assembler?

Hey ich habe folgenden rekursiven Fibonacci Code geschrieben. Ich erhalte beim ausführen immer einen Speicherzugriffsfehler

Pastebin-Link: https://pastebin.com/qNWcyBa5

.intel_syntax noprefix

.section .data

n: .quad 10 # define the fibonacci number that should be calculated

.section .text

.global _start

_start:

# call Fibonacci function f(n)

push [n] # parameter: fibonacci number to calculate

call f # call function

add rsp, 8 # remove parameter from stack

# print calculated Fibonacci number on stdout

#call printnumber

# exit process with exit code 0

mov rax, 1

mov rbx, 0

int 0x80

# f: Calculates a Fibonacci number

#  f(n) = {n, if n<=1; f(n-1)+f(n-2), else}.

#  Parameter: Integer n >= 0, passed on stack

#  Returns:  Fibonacci number f(n), returned in rax

.type f, @function

f:

push rbp # basepointer auf stack pushen

mov rbp, rsp # basepointer bekommt Wert des stackpointers

add rbp, 8 # 1.Parameter

mov rbx, [rbp] # rbx= 1.Paramter

cmp rbx, 0 # wenn n=0 passiert nichts, jmp zu end

je end

cmp rbx, 1 # wenn n=1 jmp zu baseone

je baseone

dec rbx # n-1

push [rbx] # push n-1

call f # call f(n-1)

dec rbx # n-2

push [rbx] # push n-2

call f # call f(n-2)

baseone: add rdi, 1 # rdi = rdi + 1

end: pop rbp # basepointer wieder vom Stack entfernen

ret

weiß auch nicht warum gf hier so viele Leerzeichen reinmacht. Naja hab das meiste kommentiert. Also wenn jemand einen Tipp hat wäre ich sehr dankbar.

Wer es kompilieren will.

as --gstabs -o Dateiname.o Dateiname.asm

ld -m elf-x86-64 -o Name Dateiname.o

./Name

Lg Tischtennisftw

programmieren, Assembler, Informatik, Fibonacci
Wie kann ich einstellen, dass die div-Boxen auf dem Handy untereinander dargestellt werden?

Guten Tag.

Mein Problem ist Folgendes: Auf dem PC werden die Boxen ganz normal und wie gewollt dargestellt, doch auf dem Handy wird alles in die Reihe gequetscht und man kann nichts erkennen. Wie kann ich nun einstellen, dass die div-Boxen untereinander dargestellt werden?

LG

Quellcode:

<?php
  require('templates/header.php');
?>

<div class="content">
  <div class="row">
    <div class="col-md-12">
      <div class="card">
        <div class="card-header">
          <h3 class="card-title">Kampagnen</h3>
        </div>
        <br><br>
        <div class="row">
          <div class="col-xs-12">
            <div class="box box-container">
              <div class="row">
                <div class="col-xs-12">
                  <div class="box-first box-container">
                    <div class="row">
                      <div class="col-xs-1">
                        <div class="row">
                          <div class="col-xs">
                            <div class="box-nested" text-align="center">
                              <img src="templates/XXX.png"/>
                            </div>
                          </div>
                        </div>
                      </div>
                      <div class="col-xs-3">
                        <div class="box-nested">
                          <strong> XXX </strong>
                        </div>
                      </div>
                      <div class="col-xs-3">
                        <div class="box-nested">
                          <h4>
                            <span class="badge badge-pill badge-success">XXX: 1,10€</span>
                            <span class="badge badge-pill badge-secondary">XXX: 1,00€</span>
                          </h4>
                        </div>
                      </div>
                      <div class="col-xs-4">
                        <div class="box-nested">
                          <span>
                            <h4>
                              <font color="#400040">
                                <input name="text" id="myInput" id="text" width="100%;" ?>">
                                <button class="badge badge-pill badge-danger" onclick="myFunction()">Link Kopieren</button>
                              </h4>
                            </font>
                            <script>

                              function myFunction() {
                                var copyText = document.getElementById("myInput");
                                copyText.select();
                                document.execCommand("copy");
                              }
                            </script>
                          </span>
                        </div>
                      </div>
                    </div>
                  </div>
                </div>
              </div>
            </div>
          </div>
        </div>
        <div class="card-body all-icons">
          <div class="row">
            <div class="wrap-table100">
            </div>
          </div>
        </div>
      </div>
    </div>
  </div>
</div>

<?php
  require('templates/footer.php');
?>

Das CSS, welches zugegebener Weise sehr unübersichtlich ist^^, lautet wie folgt:

https://pastebin.com/hHsGJhFE

HTML, Webseite, programmieren, CSS

Meistgelesene Beiträge zum Thema Programmieren