<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki.freitagsrunde.org/index.php?action=history&amp;feed=atom&amp;title=Javakurs%2F%C3%9Cbungsaufgaben%2FCanvas%2FMusterloesung</id>
	<title>Javakurs/Übungsaufgaben/Canvas/Musterloesung - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.freitagsrunde.org/index.php?action=history&amp;feed=atom&amp;title=Javakurs%2F%C3%9Cbungsaufgaben%2FCanvas%2FMusterloesung"/>
	<link rel="alternate" type="text/html" href="https://wiki.freitagsrunde.org/index.php?title=Javakurs/%C3%9Cbungsaufgaben/Canvas/Musterloesung&amp;action=history"/>
	<updated>2026-05-19T07:56:29Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in FreitagsrundenWiki</subtitle>
	<generator>MediaWiki 1.31.16</generator>
	<entry>
		<id>https://wiki.freitagsrunde.org/index.php?title=Javakurs/%C3%9Cbungsaufgaben/Canvas/Musterloesung&amp;diff=17676&amp;oldid=prev</id>
		<title>141.23.110.8: Musterlösung für Canvas</title>
		<link rel="alternate" type="text/html" href="https://wiki.freitagsrunde.org/index.php?title=Javakurs/%C3%9Cbungsaufgaben/Canvas/Musterloesung&amp;diff=17676&amp;oldid=prev"/>
		<updated>2012-03-07T12:58:09Z</updated>

		<summary type="html">&lt;p&gt;Musterlösung für Canvas&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;'''Hinweis:''' Die Musterlösung kann von eurer Lösung abweichen, da es immer mehrere Varianten gibt ein Problem zu lösen. Im Zweifelsfall Fragt einen Tutor.&lt;br /&gt;
&lt;br /&gt;
== Lösung: Point3D.java ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
public class Point3D {&lt;br /&gt;
&lt;br /&gt;
	private double x, y, z;&lt;br /&gt;
&lt;br /&gt;
	public Point3D(double x, double y, double z) {&lt;br /&gt;
		this.x = x;&lt;br /&gt;
		this.y = y;&lt;br /&gt;
		this.z = z;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	@Override&lt;br /&gt;
	public String toString() {&lt;br /&gt;
		return &amp;quot;(&amp;quot; + x + &amp;quot;, &amp;quot; + y + &amp;quot;, &amp;quot; + z + &amp;quot;)&amp;quot;;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public void changeCoordinates(double newX, double newY, double newZ) {&lt;br /&gt;
		this.x = newX;&lt;br /&gt;
		this.y = newY;&lt;br /&gt;
		this.z = newZ;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public double calcDistance(Point3D other) {&lt;br /&gt;
		return Math.sqrt(Math.pow(other.x - this.x, 2) + Math.pow(other.y - this.y, 2) + Math.pow(other.z - this.z, 2));&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Lösung: Sphere.java ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
public class Sphere {&lt;br /&gt;
&lt;br /&gt;
	private Point3D orign;&lt;br /&gt;
&lt;br /&gt;
	private double radius;&lt;br /&gt;
&lt;br /&gt;
	public Sphere(Point3D orign, double radius) {&lt;br /&gt;
		super();&lt;br /&gt;
		this.orign = orign;&lt;br /&gt;
		this.radius = radius;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public void changeOrign(Point3D newOrign) {&lt;br /&gt;
		this.orign = newOrign;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public void changeRadius(double newRadius) {&lt;br /&gt;
		this.radius = newRadius;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	@Override&lt;br /&gt;
	public String toString() {&lt;br /&gt;
		return &amp;quot;Sphere(orign: &amp;quot; + orign.toString() + &amp;quot;, radius: &amp;quot; + radius&lt;br /&gt;
				+ &amp;quot;)&amp;quot;;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public double calcVolume() {&lt;br /&gt;
		return (4.0 / 3.0) * Math.PI * Math.pow(radius, 3);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public double calcSurfaceArea() {&lt;br /&gt;
		return 4.0 * Math.PI * Math.pow(radius, 2);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Lösung: Canvas.java ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
import java.util.Arrays;&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Klasse für die Zeichenoberfläche inklusive Einstiegspunkt in das Programm.&lt;br /&gt;
 * @author Jonas&lt;br /&gt;
 *&lt;br /&gt;
 */&lt;br /&gt;
public class Canvas {&lt;br /&gt;
&lt;br /&gt;
	private Point3D[] points;&lt;br /&gt;
	private Sphere[] spheres;&lt;br /&gt;
&lt;br /&gt;
	private int sphereCount;&lt;br /&gt;
	private int pointCount;&lt;br /&gt;
&lt;br /&gt;
	public Canvas() {&lt;br /&gt;
		points = new Point3D[3];&lt;br /&gt;
		spheres = new Sphere[3];&lt;br /&gt;
		sphereCount = 0;&lt;br /&gt;
		pointCount = 0;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Fügt einen neuen Punkt zu dieser Zeichenoberfläche hinzu. Erweitert wenn&lt;br /&gt;
	 * nötig das Array.&lt;br /&gt;
	 */&lt;br /&gt;
	public void addPoint3D(Point3D point) {&lt;br /&gt;
		points[pointCount] = point;&lt;br /&gt;
		pointCount++;&lt;br /&gt;
&lt;br /&gt;
		if (pointCount &amp;gt;= points.length) {&lt;br /&gt;
			// Das Array ist voll.&lt;br /&gt;
			// Da in Java die Länge eines Arrays nicht mehr nachträglich&lt;br /&gt;
			// geändert werden kann, wird pohier eine Hilfsfunktion aus der Java&lt;br /&gt;
			// API benutzt, um eine größere Kopie dieses Arrays zu erzeugen.&lt;br /&gt;
&lt;br /&gt;
			// In addSphere eine alternative Implementierung.&lt;br /&gt;
			points = Arrays.copyOf(points, points.length + 3);&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Fügt eine neue Kugel zu dieser Zeichenoberfläche hinzu. Erweitert wenn&lt;br /&gt;
	 * nötig das Array.&lt;br /&gt;
	 */&lt;br /&gt;
	public void addSphere(Sphere sphere) {&lt;br /&gt;
		spheres[sphereCount] = sphere;&lt;br /&gt;
		sphereCount++;&lt;br /&gt;
&lt;br /&gt;
		if (sphereCount &amp;gt;= spheres.length) {&lt;br /&gt;
			// Das Array ist voll.&lt;br /&gt;
			Sphere[] newSpheres = new Sphere[spheres.length + 3];&lt;br /&gt;
			for (int i = 0; i &amp;lt; spheres.length; i++) {&lt;br /&gt;
				newSpheres[i] = spheres[i];&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			spheres = newSpheres;&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Berechnet das Gesamtvolumen aller Kugeln dieser Zeichenoberfläche.&lt;br /&gt;
	 */&lt;br /&gt;
	public double calcTotalVolume() {&lt;br /&gt;
		double result = 0;&lt;br /&gt;
		for (int i = 0; i &amp;lt; spheres.length; i++) {&lt;br /&gt;
			if (spheres[i] != null) {&lt;br /&gt;
				result += spheres[i].calcVolume();&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
		return result;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Berechnet die Gesamtoberfläche aller Kugeln dieser Zeichenoberfläche.&lt;br /&gt;
	 * &lt;br /&gt;
	 * @return&lt;br /&gt;
	 */&lt;br /&gt;
	public double calcTotalSurfaceArea() {&lt;br /&gt;
		double result = 0;&lt;br /&gt;
		for (int i = 0; i &amp;lt; spheres.length; i++) {&lt;br /&gt;
			if (spheres[i] != null) {&lt;br /&gt;
				result += spheres[i].calcSurfaceArea();&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
		return result;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	@Override&lt;br /&gt;
	public String toString() {&lt;br /&gt;
		String result = &amp;quot;&amp;quot;;&lt;br /&gt;
		for (int i = 0; i &amp;lt; points.length; i++) {&lt;br /&gt;
			// Wenn ein Array initialisiert wird, werden alle Felder mit null&lt;br /&gt;
			// belegt. Deswegen an dieser Stelle die Überprüfung, ob im Array an&lt;br /&gt;
			// der Stelle i ein Element abgelegt ist.&lt;br /&gt;
			if (points[i] != null) {&lt;br /&gt;
				result += points[i].toString() + &amp;quot;\n&amp;quot;;&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
		// Eine andere Form von for-Schleife zur Iteration über ein Array&lt;br /&gt;
		// Wird wie folgt gelesen:&lt;br /&gt;
		// Für jede Sphere s aus dem Array spheres...&lt;br /&gt;
		for (Sphere s : spheres) {&lt;br /&gt;
			if (s != null) {&lt;br /&gt;
				// füge sie der String-Repräsentation hinzu.&lt;br /&gt;
				result += s.toString() + &amp;quot;\n&amp;quot;;&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
		return result;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Einstiegspunkt in das Programm&lt;br /&gt;
	 */&lt;br /&gt;
	public static void main(String[] args) {&lt;br /&gt;
		System.out.println(&amp;quot;Erzeuge einen neuen Punkt...&amp;quot;);&lt;br /&gt;
		Point3D p1 = new Point3D(3, 7, 3);&lt;br /&gt;
		System.out.println(&amp;quot;Neuer Punkt p1: &amp;quot; + p1.toString());&lt;br /&gt;
		System.out.println(&amp;quot;Die Koordinaten werden nun geändert&amp;quot;);&lt;br /&gt;
		p1.changeCoordinates(2, 1, 2);&lt;br /&gt;
		System.out.println(&amp;quot;Geänderter Punkt p1: &amp;quot; + p1.toString());&lt;br /&gt;
		System.out.println(&amp;quot;Erzeue einen zweiten Punkt...&amp;quot;);&lt;br /&gt;
		Point3D p2 = new Point3D(2, 2, 3);&lt;br /&gt;
		System.out.println(&amp;quot;Neuer Punkt p2: &amp;quot; + p2.toString());&lt;br /&gt;
		System.out&lt;br /&gt;
				.println(&amp;quot;Distanz zwischen p1 und p2: &amp;quot; + p1.calcDistance(p2));&lt;br /&gt;
		System.out.println(&amp;quot;Erzeuge eine neue Kugel...&amp;quot;);&lt;br /&gt;
		Sphere s1 = new Sphere(p1, 2);&lt;br /&gt;
		System.out.println(&amp;quot;Neue Kugel s1: &amp;quot; + s1.toString());&lt;br /&gt;
		System.out.println(&amp;quot;Oberfläche der Kugel: &amp;quot; + s1.calcSurfaceArea());&lt;br /&gt;
		System.out.println(&amp;quot;Volumen der Kugel: &amp;quot; + s1.calcVolume());&lt;br /&gt;
&lt;br /&gt;
		System.out.println(&amp;quot;Erzeuge eine neue Zeichenoberfläche...&amp;quot;);&lt;br /&gt;
		Canvas c = new Canvas();&lt;br /&gt;
		System.out.println(&amp;quot;Füge 4 Punkte der Zeichenoberfläche hinzu...&amp;quot;);&lt;br /&gt;
		c.addPoint3D(p1);&lt;br /&gt;
		c.addPoint3D(p2);&lt;br /&gt;
		c.addPoint3D(new Point3D(1, 2, 3));&lt;br /&gt;
		c.addPoint3D(new Point3D(4, 9, -2));&lt;br /&gt;
		System.out.println(&amp;quot;Aktueller Inhalt der Zeichenoberfläche:&amp;quot;);&lt;br /&gt;
		System.out.println(c.toString());&lt;br /&gt;
&lt;br /&gt;
		System.out.println(&amp;quot;Füge s1 viermal zur Zeichenoberfläche hinzu...&amp;quot;);&lt;br /&gt;
		c.addSphere(s1);&lt;br /&gt;
		c.addSphere(s1);&lt;br /&gt;
		c.addSphere(s1);&lt;br /&gt;
		c.addSphere(s1);&lt;br /&gt;
		System.out.println(&amp;quot;Gesamtoberfläche der Zeichenoberfläche: &amp;quot;&lt;br /&gt;
				+ c.calcTotalSurfaceArea());&lt;br /&gt;
		System.out.println(&amp;quot;Gesamtvolumen der Zeichenoberfläche: &amp;quot;&lt;br /&gt;
				+ c.calcTotalVolume());&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Kommentare ==&lt;br /&gt;
Wenn du Anmerkungen zur Aufgabe hast oder Lob und Kritik loswerden möchtest, ist hier die richtige Stelle dafür. Klicke einfach ganz rechts auf &amp;quot;bearbeiten&amp;quot; und schreibe deinen Kommentar direkt ins Wiki. Keine Scheu, es geht nichts kaputt ;)&lt;/div&gt;</summary>
		<author><name>141.23.110.8</name></author>
		
	</entry>
</feed>