Webmaster Forum Logo Part 1 Webmaster Forum Logo Part 2
Webmaster Forum Logo Part 3
     
 
  :: Anmeldung

Benutzername:

Registrierung...

Passwort:

Passwort vergessen?

angemeldet bleiben


  
  :: Umfrage
Welche sozialen Netzwerke benutzt du regelmäßig?

 Facebook
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 73%
 keines
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 22%
 Google+
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 19%
 Twitter
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 11%
 Xing
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 6%
 schülerVZ
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 6%
 meinVZ
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 4%
 studiVZ
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 4%
 MySpace
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 2%
 LinkedIn
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 2%

 ges. 393 Stimmen
 
  :: Buttons

Valid XHTML 1.0 Transitional

nocturne

Kaiser

Dabei seit: 06.01.2005

Beiträge: 1 167

 

1 Zum Seitenanfang

Montag, 15. Januar 2007, 14:06

Progr. Aufgabe: Lineare Hochrechnung

Hallo,

vieleicht könnt ihr mir helfen: (Schulaufgabe)
Ich habe die Aufgabe ein kleines Framework zu entwickeln:

Es handelt sich um die Skalierung von 3 Vierecken in einem größeren Viereck.
Jedes der 3 Vierecke hat 4 Eckpunkte, diese Eckpunkte haben jeweils eine X- und eine Y-Coordinate.

Für jedes Viereck gibt es also 8 Datenfelder (x1,y1,x2,y2,x3,y3,x4,y4).
(Gemeint ist im Bild-Anhang das blau-markierte-Viereck.)

Für dieses gesammte Viereck sind 2 Sitouationen bekannt.
Hier die Positionen für die erste Sitouation:
Das umfassende Viereck hat die Maße: 7,4 (x,y)
Für den ersten Punkt : 1,1 (x, y)
Für den zweiten Pkt. : 3,1 (x, y)
Für den dritten Punkt: 3,3 (x, y)
Für den vierten Punkt: 1,3 (x, y)

Hier die Positionen für die Zweite:
Das umfassende Viereck hat die Maße: 5,3 (x, y)
Für den ersten Punkt : 1,1 (x, y)
Für den zweiten Pkt. : 2,1 (x, y)
Für den dritten Punkt: 2,2 (x, y)
Für den vierten Punkt: 1,2 (x, y)

Hier jetzt die Aufgabe:
Schreiben Sie ein Alghorythmus welcher aus den beiden Positions und Größeninformationen auf ein umfassendes Viereck von der Größe 13x6 hochrechnen kann und geben Sie die Informationen auf dem Bildschirm aus.

Also die Programmiersprache ist egal, hauptsache es kommen korrekte Informationen raus.
»nocturne« hat folgende Datei angehängt:
  • aufg4885_33.bmp (89,77 kB - 46 mal heruntergeladen - zuletzt: 18. Dezember 2011, 10:43)
 

heinervdm

Technik-Admin

Dabei seit: 02.10.2002

Beiträge: 3 772

 

2 Zum Seitenanfang

Montag, 15. Januar 2007, 19:38

Ich verstehe nicht so ganz was du machen musst.

du hast jeweils nur 1 Viereck gegeben und sollst ein Umfassendes Viereck um 3 Vierecke berechnen, wie sollst du das machen ohne die anderen beiden zu kennen?

Und dann was für Informationen sollst du Berechnen?
Über mich: www.heinervdm.de
Persönlich Mitteilungen an mich bitte als PN (nicht Email) hier im Forum. ICQ und Skype bitte nur in Notfällen.
 

tommyfin

Routinier

Dabei seit: 20.07.2004

Beiträge: 307

 

3 Zum Seitenanfang

Montag, 15. Januar 2007, 21:19

Hi,

erstmal 3 Verständnisfragen:
1. Warum werden vier Punkte angegeben, da es ja anscheinend Rechtecke sind und die über 2 Punkte bereits fest definiert sind.
2. Hast du irgendwelche Vorgaben für die Abstände der Kästchen, oder sollen die das umgebende Rechteck voll ausfüllen?
Was für Maße sind beim umfassenden Rechteck gegeben?
Sind das Höhe und Breite oder die Eckkoordinaten (die anderen müssten ja dann 0,0 sein)?

Nunja, dann mal zu deinem Problem:

Mal vorrausgesetzt das oben trifft so zu;
Dann müsstest du ja das ganze nur mit Faktoren hochrechnen, wenn ich das korrekt verstanden habe.

z.B. muss aus dem äußeren Rechteck 7x4 ja ein Rechteck 13x6 werden.
Dann müsstest du die Skalierung für x durch 13/7 berechnen und y durch 6/4 also 3/2. Dann die inneren Rechtecke entsprechend mit den Skalierungsfaktoren hochrechnen. Dabei dann jeweils Auf- bzw. Abrunden.

Wichtig bei der Programmierung wäre dann halt bei den Skalierungsfaktoren float als Datentyp zu wählen, da du ja z.B. 3/2 also 1,5 als Wert verwenden musst.

Viel Erfolg beim programmieren.

Gruß,

Thomas
 

nocturne

Kaiser

Dabei seit: 06.01.2005

Beiträge: 1 167

 

4 Zum Seitenanfang

Dienstag, 16. Januar 2007, 10:31

Zitat

Original von heinervdm
Ich verstehe nicht so ganz was du machen musst.

du hast jeweils nur 1 Viereck gegeben und sollst ein Umfassendes Viereck um 3 Vierecke berechnen, wie sollst du das machen ohne die anderen beiden zu kennen?

Und dann was für Informationen sollst du Berechnen?

Die informationen für das äußere viereck liegen bereits vor!

Die anderen 2 Vierecke sind für die Lösung uninteressant.

Ich wiederhole die Aufgabe:
Schreiben Sie ein Alghorythmus welcher aus den beiden Positions und Größeninformationen auf ein umfassendes Viereck von der Größe13x6 hochrechnen kann und geben Sie die Informationen auf dem Bildschirm aus.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »nocturne« (16. Januar 2007, 10:33)

 

nocturne

Kaiser

Dabei seit: 06.01.2005

Beiträge: 1 167

 

5 Zum Seitenanfang

Dienstag, 16. Januar 2007, 10:41

Zitat

Original von tommyfin
Hi,

erstmal 3 Verständnisfragen:
1. Warum werden vier Punkte angegeben, da es ja anscheinend Rechtecke sind und die über 2 Punkte bereits fest definiert sind.

Die anderen 2 Punkte sind IM BEISPIEL tatsächlich redundant. Sie werden nicht unbedingt benötigt. Jedoch sollen Vierecke berechnet werden, diese müssen nicht unbedingt rechtewinkel haben (Idiotenfalle in Aufgabe).

Zitat

Original von tommyfin
2. Hast du irgendwelche Vorgaben für die Abstände der Kästchen, oder sollen die das umgebende Rechteck voll ausfüllen?

Es gibt keine informationen über die Randabstände, im 2. fall könnte das viereck auch hochkant stehen, oder an der rechten Seite.

Zitat

Original von tommyfin
Was für Maße sind beim umfassenden Rechteck gegeben?
Sind das Höhe und Breite oder die Eckkoordinaten (die anderen müssten ja dann 0,0 sein)?

Ja, sind höhen und breiten. Startcoordinaten gibt es nicht. Ähnlich wie beim Monitor bei 800x600 ist die Breite 800 und die Höhe 600.

Zitat

Original von tommyfin

Nunja, dann mal zu deinem Problem:

Mal vorrausgesetzt das oben trifft so zu;
Dann müsstest du ja das ganze nur mit Faktoren hochrechnen, wenn ich das korrekt verstanden habe.

Genau, absolut korrekt.

Zitat

Original von tommyfin

z.B. muss aus dem äußeren Rechteck 7x4 ja ein Rechteck 13x6 werden.
Dann müsstest du die Skalierung für x durch 13/7 berechnen und y durch 6/4 also 3/2. Dann die inneren Rechtecke entsprechend mit den Skalierungsfaktoren hochrechnen. Dabei dann jeweils Auf- bzw. Abrunden.

Genau.

Zitat

Original von tommyfin

Wichtig bei der Programmierung wäre dann halt bei den Skalierungsfaktoren float als Datentyp zu wählen, da du ja z.B. 3/2 also 1,5 als Wert verwenden musst.

Genau.

Zitat

Original von tommyfin
Viel Erfolg beim programmieren.

Danke, es ist vor allem eine Abstraktionsaufgabe. Ich habe die klassen:
Point
Rectangle (4xPoint)
Frame (Breite,Höhe)

Zitat

Original von tommyfin
Gruß,

Thomas

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »nocturne« (16. Januar 2007, 10:44)

 

tommyfin

Routinier

Dabei seit: 20.07.2004

Beiträge: 307

 

6 Zum Seitenanfang

Dienstag, 16. Januar 2007, 14:33

Hi,

hab da mal was rausgekramt, was ich mal in der Uni als Übung zusammenprogrammiert habe.
Allerdings waren dort immer Rechtecke gefragt, aber das sollte ja kein Problem mehr sein, das noch anzupassen.

Also:
Erstmal hab ich mir ne Funktion geschrieben, die mir ein Rechteck mit den übergebenen Punkten zeichnet (Für die Ausgabe hatten wir irgendeine Routine vorgegeben). Könnte man sich ja auch als Koordinaten ausgeben lassen, wenn zeichnen nicht gefragt ist. Hier noch mit unterschiedlichen Farben zwecks besserer Unterscheidung.

Quellcode

1
2
3
4
5
6
7
void draw_rectangle(Point p1, Point p2,ColorRef colr)
{
    cwin << Line(Point(p1.get_x(),p1.get_y()),Point(p2.get_x(),p1.get_y()),colr);//oben
	cwin << Line(Point(p1.get_x(),p1.get_y()),Point(p1.get_x(),p2.get_y()),colr);//links
	cwin << Line(Point(p1.get_x(),p2.get_y()),Point(p2.get_x(),p2.get_y()),colr);//unten
	cwin << Line(Point(p2.get_x(),p1.get_y()),Point(p2.get_x(),p2.get_y()),colr);//rechts
}

Könnte man auch noch ein wenig einfacher gestalten, aber es funktionierte so. :)

Dann hab ich jetzt dein Problemchen mal ein wenig umgesetzt und bin zu folgendem Ergebnis gekommen:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
int b,h,x1,y1,x2,y2,bn,hn;
	float x11,y11,x12,y12;
	b=7; //Breite
	h=4; //Höhe
	x1=1;
	y1=1;
	x2=3;
	y2=3;
	draw_rectangle(Point(0,0),Point(b,h),BLACK);
	draw_rectangle(Point(x1,y1),Point(x2,y2),BLUE);
	draw_rectangle(Point(x1,y2),Point(x2,h),YELLOW);
	draw_rectangle(Point(x2,y1),Point(b,h),RED);
	cwin.coord(-10, -10, 20, 20); // Ändert das Koordinatensystem zwecks Übersichtlichkeit
    bn=16; //Neue Breite
	hn=7; // Neue Höhe
	x11 = bn/b * x1;
	y11 = hn/h * y1;
	x12 = bn/b * x2;
	y12 = hn/h * y2;
	draw_rectangle(Point(0,0),Point(bn,hn),BLACK);
	draw_rectangle(Point(x1,y1),Point(x12,y12),BLUE);
	draw_rectangle(Point(x1,y12),Point(x12,hn),YELLOW);
	draw_rectangle(Point(x12,y1),Point(bn,hn),RED);


So, hoffe das hilft dir erstmal weiter.

Gruß,

Thomas
 

nocturne

Kaiser

Dabei seit: 06.01.2005

Beiträge: 1 167

 

7 Zum Seitenanfang

Dienstag, 16. Januar 2007, 16:21

Fertig.

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public static void main(String[] args) {
		Point p = getP3(new Size(13,6), new Size(7,4),new Point(3,1),new Size(5,3),new Point(2,1));
		System.out.println(p);
	}

	private static Point getP3(Size target, Size erste, Point ersteB, Size zweite, Point zweiteB) {
		double newX = getJ3WennI3(target.width, ersteB.posX, erste.width, zweiteB.posX, zweite.width);
		double newY = getJ3WennI3(target.height, ersteB.posY, erste.height, zweiteB.posY, zweite.height);

		return new Point(newX, newY);
	}

	private static double getJ3WennI3(double i3, double j1, double i1, double j2, double i2) {
		double m = (i2 - i1) / (j2 - j1);
		double b = (i1 - m * j1);
		double res = (i3 - b) / m;
		if(Double.isInfinite(res))
			throw new RuntimeException("Values invalid");
		if(Double.isNaN(res) && j1==j2)
			return j1;
		return res;
	}


Übrigends : [6, 1]

Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von »nocturne« (16. Januar 2007, 16:48)