Inhalte zur Vorlesungswoche #12, Informatik 1 im Wintersemester 2024/25
(EN google-translate)
(PL google-translate)
Die Übung für den 07.01. bzw. 09.01. findet sich auf Moodle, siehe pdf dort: "Übung 7.1. / 9.1. Muluem (Insertion Sort)"
#include<iostream>
#include<stdlib.h>
using namespace std;
int main(void)
{
srand(time(NULL));
int n = (rand() % 10)+5;
int arr[n];
for(int i=0; i<n; i++)
arr[i] = rand() % 100;
for(int i=1; i<=n; i++)
{
for(int k=0; k<=i; k++)
{
if(arr[i]<arr[k])
{
int temp = arr[i];
for(int m=i; m>=k; m--)
{
arr[m] = arr[m-1];
}
arr[k] = temp;
}
}
}
for(int i=0; i<n; i++)
cout<<arr[i]<<" ";
cout<<endl;
return 0;
}
Code 0-1: Studentische Lösung 2
#include<iostream>
using namespace std;
int main(void)
{
int arr[]={16,6,27,9,1};
for(int i=0; i<5;i++)
{
for(int j=i;j>0;j--)
{
if(arr[j]< arr[j-1])
{
int t= arr[j];
arr[j]= arr[j-1];
arr[j-1]=t;
}
else
{
break;
}
}
}
cout<<"Reihenfolge ist: "<<endl;
for(int i=0; i<5;i++)
{
cout<<arr[i]<<endl;
}
return 0;
}
Code 0-2: Studentische Lösung 2
#include<iostream>
using namespace std;
void sortieren(int arr[], int anz)
{
for(int i=0; i<anz;i++)
{
for(int j=i;j>0;j--)
{
if(arr[j]< arr[j-1])
{
int t= arr[j];
arr[j]= arr[j-1];
arr[j-1]=t;
}
else
{
break;
}
}
}
}
int main(void)
{
int arr[]={16,6,27,9,1};
sortieren(arr, 5);
cout<<"Reihenfolge ist: "<<endl;
for(int i=0; i<5;i++)
{
cout<<arr[i]<<endl;
}
return 0;
}
Code 0-3: Studentische Lösung mit Funktion.
Themen
|
1 Quiz zu Sprachelementen von C/C++
|
2 Einführung von VRML
|
Übersicht: 50_Simulationstechnik/03_VRML
Primitive: 50_Simulationstechnik/03_VRML/01_Primitive
Zusammengesetzte Figuren: 50_Simulationstechnik/03_VRML/02_Zusammengesetzt
3 Entwurf und Umsetzung eines Code-Generators für VRML mit C/C++
|
4 Analyse der notwendigen Sprachelemente in C/C++
Gehen Sie die Schritte aus Abschnitt 3 noch einmal durch und nennen Sie Sprachelemente, die Ihnen noch nicht sehr vertraut sind, damit sie gemeinsam noch einmal genauer angeschaut werden können.
vrmlgenerator.zip -- Vorentwicklung VRML-Generator.
Bild 0-1: Screenshot zur mit vrmlgenerator4 generierten VRML-Datei.
ÜBUNG (Di 14.1. / Do 16.1.) -- Entwicklung und Verwendung von Funktionen
Nutzen Sie die Übung gerne auch dazu, um noch einmal bei älteren Aufgaben oder Lehrinhalten offene Fragen zu klären.
Vorbereitung:
|
|
|
Hinweis: Die Matrix in den Zeilen 85 bis 88 in vrmlgenerator4.cpp hat im Moment keine Bedeutung und könnte entfernt werden.
Aufgabe 1 -- Varwendung der Generierungsfunktion generiereQuader(..) in vrmlgenerator4.cpp
|
Hinweis: Als Koordinatenursprung der Quader wird jeweils deren Mittelpunkt angegeben.
Aufgabe 2
Die Matrix in den Zeilen 85 bis 88 bei vrmlgenerator4.cpp war gedacht, dass pro Zeile die Parameter eines Quaders gespeichert werden. Mit einer Schleife sollen die Zeilen der Matrix durchgegangen werden und pro Zeile ein Funktionsaufruf zur Generierung eines Quaders mit den in der Matrix gespeicherten Daten erfolgen.
Setzen Sie dieses Prinzip um, indem Sie die Daten Ihrer Sitzgelegenheit auf eine passende Matrix übertragen und die Sitzgelegenheit erzeugen, indem dann zeilenweise die Matrix durchgegangen wird.
Schließlich wäre noch denkbar eine Funktion erzeugeWelt(..) zu schreiben, der die ganze Matrix übergeben wird und die dann alles nötige erledigt.
Aufgabe 3
|
50_Simulationstechnik/03_VRML/01_Primitive
|
Hinweis: Die Anzahl der übergebenen Parameter wird jeweils unterschiedlich sein, da beispielsweise eine Kugel nur den Radius als Parameter braucht statt Höhe, Breite und Tiefe beim Quader.
|
Aufgabe 4
Nutzen Sie das Programm aus Aufgabe 3 für weitere Experimente zur Erstellung von 3D-Welten, indem Sie die neuen Funktuinen benutzen:
|
Zusatzaufgabe
Anhand des folgenden Beispiels lässt sich ergründen, wie Animationen und gelenkige Verbindungen in VRML hergestellt werden können:
50_Simulationstechnik/03_VRML/03_Animation
|
Studentische Lösung zu Aufgabe 1:
#include <iostream>
using namespace std;
void generiereQuader(float x,float y,float z,float b,float h,float t,float R,float G,float B)
{
char text[][100] = {
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
"DEF FIGUR2 Transform\n",
"{\n",
" translation 0 0 0\n",
" rotation 1 0 0 0.0\n",
" children\n",
" [\n",
" Shape\n",
" {\n",
" geometry Box\n",
" {\n",
" size 1.0 2.0 0.25\n",
" }\n",
" appearance Appearance\n",
" {\n",
" material Material\n",
" {\n",
" diffuseColor 0.8 0.2 0.2\n",
" shininess 0.0\n",
" specularColor 0.2 0.2 0.8\n",
" transparency 0.0\n",
" }\n",
" }\n",
" }\n",
" ]\n",
"}\n"
}; //ende text array
for(int i=0;i<35;i++)
{
if(i==12)// translation 0 0 0
{
cout<<"translation "<<x<<" "<<y<<" "<<z<<endl;
}
else if(i==20)// size 1.0 2.0 0.25
{
cout<<"size "<<b<<" "<<h<<" "<<t<<endl;
}
else if(i==26)//diffuseColor 0.2 0.2 0.8
{
cout<<"diffuseColor "<<R<<" "<<G<<" "<<B<<endl;
}
else if(i==28)//specularColor 0.2 0.2 0.8
{
cout<<"specularColor "<<R<<" "<<G<<" "<<B<<endl;
}
else
{
cout<<text[i];
}
}
}
int main(void)
{
cout<<"#VRML V2.0 utf8 \n";
cout<<"#Beispiel eines Quaders\n";
cout<<"\n";
cout<<"DirectionalLight \n";
cout<<"{\n";
cout<<" direction 0 -1 0\n";
cout<<" color 1 1 1\n";
cout<<"}\n";
float matrix[][9] = {
{0,0,0,1.0,1.0,1.0,0,0,1.0},
{1,0,0,1.0,1.0,1.0,0,0,1.0}
};
//generiereQuader(float x,float y,float z,float b,float h,float t,float R,float G,float B)
for(int i=0;i<5;i++)
generiereQuader(i*2,0,0,1.0,2.0,1.0,0,0,1.0);
for(int i=0;i<5;i++)
generiereQuader(i*2,0.5,1,1.0,1.0,1.0,0,1,1.0);
for(int i=0;i<5;i++)
generiereQuader(i*2,-2,-0.5,1.0,0.5,0.5,0,1,1.0);
}//ende main
Code 0-4: Studentische Lösung zu Aufgabe 1.
Bild 0-2: VRML Darstellung der Lösung.
Studentische Lösung zu Aufgabe 2:
#include <iostream>
using namespace std;
void generiereQuader(float x,float y,float z,float b,float h,float t,float R,float G,float B)
{
char text[][100] = {
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
"DEF FIGUR2 Transform\n",
"{\n",
" translation 0 0 0\n",
" rotation 1 0 0 0.0\n",
" children\n",
" [\n",
" Shape\n",
" {\n",
" geometry Box\n",
" {\n",
" size 1.0 2.0 0.25\n",
" }\n",
" appearance Appearance\n",
" {\n",
" material Material\n",
" {\n",
" diffuseColor 0.8 0.2 0.2\n",
" shininess 0.0\n",
" specularColor 0.2 0.2 0.8\n",
" transparency 0.0\n",
" }\n",
" }\n",
" }\n",
" ]\n",
"}\n"
}; //ende text array
for(int i=0;i<35;i++)
{
if(i==12)// translation 0 0 0
{
cout<<"translation "<<x<<" "<<y<<" "<<z<<endl;
}
else if(i==20)// size 1.0 2.0 0.25
{
cout<<"size "<<b<<" "<<h<<" "<<t<<endl;
}
else if(i==26)//diffuseColor 0.2 0.2 0.8
{
cout<<"diffuseColor "<<R<<" "<<G<<" "<<B<<endl;
}
else if(i==28)//specularColor 0.2 0.2 0.8
{
cout<<"specularColor "<<R<<" "<<G<<" "<<B<<endl;
}
else
{
cout<<text[i];
}
}
}
int main(void)
{
cout<<"#VRML V2.0 utf8 \n";
cout<<"#Beispiel eines Quaders\n";
cout<<"\n";
cout<<"DirectionalLight \n";
cout<<"{\n";
cout<<" direction 0 -1 0\n";
cout<<" color 1 1 1\n";
cout<<"}\n";
float matrix[][9] = {
{1,0,0,3.0,0.5,1.0,0,1.0,1.0},
{1,0,1,3.0,0.5,1.0,0,1.0,1.0},
{-0.25,0.5,0,0.5,0.5,1.0,0,0,1.0},
{2.25,0.5,0,0.5,0.5,1.0,0,0,1.0},
{1,0.5,1,3.0,0.5,1.0,1.0,1.0,1.0}
};
//generiereQuader(float x,float y,float z,float b,float h,float t,float R,float G,float B)
for(int i = 0; i<5; i++)
generiereQuader(matrix[i][0], matrix[i][1], matrix[i][2], matrix[i][3], matrix[i][4], matrix[i][5], matrix[i][6], matrix[i][7], matrix[i][8]);
}//ende main
Code 0-5: Studentische Lösung zu Aufgabe 2.
Bild 0-3: VRML Darstellung der Lösung.