Skip to content
Snippets Groups Projects
Commit a04f6dcd authored by Peter Gerwinski's avatar Peter Gerwinski
Browse files

Vorlesung 12.11.2015

Vorbereitung Praktikum 16.11.2015
parent 281f7993
Branches
No related tags found
No related merge requests found
Showing
with 466 additions and 2 deletions
SOURCES = opengl-magic.c textured-spheres.c SOURCES = opengl-magic.c textured-spheres.c
INCLUDES = opengl-magic.h textured-spheres.h INCLUDES = opengl-magic.h textured-spheres.h
LIBS = -lGL -lGLU -lglut LIBS = -lm -lGL -lGLU -lglut
%: %.c $(SOURCES) $(INCLUDES) %: %.c $(SOURCES) $(INCLUDES)
gcc -Wall $< $(SOURCES) $(LIBS) -o $@ gcc -Wall $< $(SOURCES) $(LIBS) -o $@
SOURCES = opengl-magic.c textured-spheres.c
INCLUDES = opengl-magic.h textured-spheres.h
LIBS = -lGL -lGLU -lglut
%: %.c $(SOURCES) $(INCLUDES)
gcc -Wall $< $(SOURCES) $(LIBS) -o $@
#include <stdio.h>
#define DISKS 3
int n[3], tower[3][DISKS];
void display (void)
{
for (int i = 0; i < 3; i++)
{
printf ("tower %d: ", i);
for (int j = 0; j < n[i]; j++)
printf ("%2d", tower[i][j]);
printf ("\n");
}
printf ("\n");
}
int main (void)
{
n[0] = 0;
n[1] = 0;
n[2] = 0;
display ();
}
#include <stdio.h>
#define DISKS 3
int n[3], tower[3][DISKS];
void display (void)
{
for (int i = 0; i < 3; i++)
{
printf ("tower %d: ", i);
for (int j = 0; j < n[i]; j++)
printf ("%2d", tower[i][j]);
printf ("\n");
}
printf ("\n");
}
int main (void)
{
n[0] = DISKS;
for (int i = 0; i < DISKS; i++)
tower[0][i] = DISKS - 1 - i;
n[1] = 0;
n[2] = 0;
display ();
}
#include <stdio.h>
#define DISKS 3
int n[3], tower[3][DISKS];
void display (void)
{
for (int i = 0; i < 3; i++)
{
printf ("tower %d: ", i);
for (int j = 0; j < n[i]; j++)
printf ("%2d", tower[i][j]);
printf ("\n");
}
printf ("\n");
}
void hanoi (int src, int dst, int tmp, int disks)
{
tower[dst][n[dst]] = tower[src][n[src] - 1];
n[src]--;
n[dst]++;
display ();
}
int main (void)
{
n[0] = DISKS;
for (int i = 0; i < DISKS; i++)
tower[0][i] = DISKS - 1 - i;
n[1] = 0;
n[2] = 0;
display ();
hanoi (0, 2, 1, 1);
}
#include <stdio.h>
#define DISKS 3
int n[3], tower[3][DISKS];
void display (void)
{
for (int i = 0; i < 3; i++)
{
printf ("tower %d: ", i);
for (int j = 0; j < n[i]; j++)
printf ("%2d", tower[i][j]);
printf ("\n");
}
printf ("\n");
}
void hanoi (int src, int dst, int tmp, int disks)
{
if (disks > 1)
hanoi (src, tmp, dst, disks - 1);
tower[dst][n[dst]] = tower[src][n[src] - 1];
n[src]--;
n[dst]++;
display ();
if (disks > 1)
hanoi (tmp, dst, src, disks - 1);
}
int main (void)
{
n[0] = DISKS;
for (int i = 0; i < DISKS; i++)
tower[0][i] = DISKS - 1 - i;
n[1] = 0;
n[2] = 0;
display ();
hanoi (0, 2, 1, DISKS);
}
20151112/kleinesMinusO.PNG

94.2 KiB

...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
void init_opengl (int *argcp, char **argv, char *window_name) void init_opengl (int *argcp, char **argv, char *window_name)
{ {
glutInit (argcp, argv); glutInit (argcp, argv);
glutInitDisplayMode (GLUT_RGBA | GLUT_SINGLE | GLUT_DEPTH); glutInitDisplayMode (GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH);
glutInitWindowSize (1024, 768); glutInitWindowSize (1024, 768);
glutCreateWindow (window_name); glutCreateWindow (window_name);
glMatrixMode (GL_PROJECTION); glMatrixMode (GL_PROJECTION);
......
#include <GL/gl.h>
#include <GL/glu.h>
#include <GL/freeglut.h>
#include <math.h>
#include "opengl-magic.h"
#define phi0 1.0 /* geg. Anfangswert */
#define omega0 0.0 /* geg. Anfangswert */
#define dt 0.05
#define g 9.81
#define l 1.0
double t = 0.0;
double phi = phi0;
double omega = omega0;
void draw (void)
{
glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
set_material_color (0.8, 0.8, 1.0);
glPushMatrix ();
glRotatef (90, 1.0, 0.0, 0.0);
glTranslatef (0.0, 0.0, -0.75);
glRotatef (180.0 + phi / M_PI * 180.0, 0.0, 1.0, 0.0);
glTranslatef (0.0, 0.0, -1.0);
glutSolidCylinder (0.01, l, 13, 1);
glutSolidSphere (0.1, 31, 10);
glPopMatrix ();
glFlush ();
}
void timer_handler (int value)
{
t += dt;
glutPostRedisplay ();
glutTimerFunc (50, timer_handler, 0);
}
int main (int argc, char **argv)
{
init_opengl (&argc, argv, "Pendulum");
glutDisplayFunc (draw);
glutTimerFunc (50, timer_handler, 0);
glutMainLoop ();
return 0;
}
#include <GL/gl.h>
#include <GL/glu.h>
#include <GL/freeglut.h>
#include <math.h>
#include "opengl-magic.h"
#define phi0 1.0 /* geg. Anfangswert */
#define omega0 0.0 /* geg. Anfangswert */
#define dt 0.05
#define g 9.81
#define l 1.0
double t = 0.0;
double phi = phi0;
double omega = omega0;
void draw (void)
{
glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
set_material_color (0.8, 0.8, 1.0);
glPushMatrix ();
glRotatef (90, 1.0, 0.0, 0.0);
glTranslatef (0.0, 0.0, -0.75);
glRotatef (180.0 + phi / M_PI * 180.0, 0.0, 1.0, 0.0);
glTranslatef (0.0, 0.0, -1.0);
glutSolidCylinder (0.01, l, 13, 1);
glutSolidSphere (0.1, 31, 10);
glPopMatrix ();
glFlush ();
}
void timer_handler (int value)
{
t += dt;
phi += dt * omega;
omega += dt * (-g / l) * sin (phi);
glutPostRedisplay ();
glutTimerFunc (50, timer_handler, 0);
}
int main (int argc, char **argv)
{
init_opengl (&argc, argv, "Pendulum");
glutDisplayFunc (draw);
glutTimerFunc (50, timer_handler, 0);
glutMainLoop ();
return 0;
}
#include <GL/gl.h>
#include <GL/glu.h>
#include <GL/freeglut.h>
#include <math.h>
#include "opengl-magic.h"
#define phi0 1.0 /* geg. Anfangswert */
#define omega0 0.0 /* geg. Anfangswert */
#define dt 0.05
#define g 9.81
#define l 1.0
double t = 0.0;
double phi = phi0;
double omega = omega0;
void draw (void)
{
glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
set_material_color (1.0, 1.0, 0.8);
glPushMatrix ();
glRotatef (90, 1.0, 0.0, 0.0);
glTranslatef (0.0, 0.0, -0.75);
glRotatef (180.0 + phi / M_PI * 180.0, 0.0, 1.0, 0.0);
glTranslatef (0.0, 0.0, -1.0);
glutSolidCylinder (0.01, l, 13, 1);
glutSolidSphere (0.1, 31, 10);
glPopMatrix ();
glFlush ();
}
void timer_handler (int value)
{
t += dt;
phi += dt * omega;
omega += dt * (-g / l) * phi;
glutPostRedisplay ();
glutTimerFunc (50, timer_handler, 0);
}
int main (int argc, char **argv)
{
init_opengl (&argc, argv, "Pendulum");
glutDisplayFunc (draw);
glutTimerFunc (50, timer_handler, 0);
glutMainLoop ();
return 0;
}
#include <GL/gl.h>
#include <GL/glu.h>
#include <GL/freeglut.h>
#include <math.h>
#include "opengl-magic.h"
#define phi0 0.5 /* geg. Anfangswert */
#define omega0 0.0 /* geg. Anfangswert */
#define dt 0.05
#define g 9.81
#define l 1.0
double t = 0.0;
double phi_with_sin = phi0;
double omega_with_sin= omega0;
double phi_without_sin = phi0;
double omega_without_sin= omega0;
void draw_pendulum (double phi)
{
glPushMatrix ();
glRotatef (90, 1.0, 0.0, 0.0);
glTranslatef (0.0, 0.0, -0.75);
glRotatef (180.0 + phi / M_PI * 180.0, 0.0, 1.0, 0.0);
glTranslatef (0.0, 0.0, -1.0);
glutSolidCylinder (0.01, 1.0, 13, 1);
glutSolidSphere (0.1, 31, 10);
glPopMatrix ();
glutSwapBuffers ();
}
void draw (void)
{
glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
set_material_color (0.8, 0.8, 1.0);
draw_pendulum (phi_with_sin);
set_material_color (1.0, 0.8, 0.8);
draw_pendulum (phi_without_sin);
set_material_color (0.8, 1.0, 0.8);
double A = phi0;
double B = 0.5 * M_PI; /* 90° */
double phi_analytic = A * sin (sqrt (g / l) * t + B);
draw_pendulum (phi_analytic);
glFlush ();
}
void timer_handler (int value)
{
t += dt;
phi_with_sin += dt * omega_with_sin; /* geg. Differentialgleichung */
omega_with_sin += - dt * g / l * sin (phi_with_sin); /* geg. Differentialgleichung */
/* _ohne_ Kleinwinkelnäherung */
phi_without_sin += dt * omega_without_sin; /* geg. Differentialgleichung */
omega_without_sin += - dt * g / l * phi_without_sin; /* geg. Differentialgleichung */
/* _mit_ Kleinwinkelnäherung */
glutPostRedisplay ();
glutTimerFunc (50, timer_handler, 0);
}
int main (int argc, char **argv)
{
init_opengl (&argc, argv, "Pendulum");
glutDisplayFunc (draw);
glutTimerFunc (50, timer_handler, 0);
glutPostRedisplay ();
glutMainLoop ();
return 0;
}
File added
% ainf-2015ws-p2.pdf - Labor Notes on Fundamentals in Computer Architecture
% Copyright (C) 2014, 2015 Peter Gerwinski
%
% This document is free software: you can redistribute it and/or
% modify it either under the terms of the Creative Commons
% Attribution-ShareAlike 3.0 License, or under the terms of the
% GNU General Public License as published by the Free Software
% Foundation, either version 3 of the License, or (at your option)
% any later version.
%
% This document is distributed in the hope that it will be useful,
% but WITHOUT ANY WARRANTY; without even the implied warranty of
% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
% GNU General Public License for more details.
%
% You should have received a copy of the GNU General Public License
% along with this document. If not, see <http://www.gnu.org/licenses/>.
%
% You should have received a copy of the Creative Commons
% Attribution-ShareAlike 3.0 Unported License along with this
% document. If not, see <http://creativecommons.org/licenses/>.
\documentclass[a4paper]{article}
\usepackage{pgscript}
\usepackage{multicol}
\usepackage{sfmath}
\sloppy
\pagestyle{empty}
\newcommand{\sep}{~$\cdot$~}
\newcommand{\mylicense}{CC-by-sa (Version 3.0) oder GNU GPL (Version 3 oder höher)}
\begin{document}
\makebox(0,0)[tl]{\includegraphics[scale=0.57]{logo-hochschule-bochum-cvh-text.pdf}}\hfill
\makebox(0,0)[tr]{\includegraphics[scale=0.5]{logo-hochschule-bochum.pdf}}
\par\bigskip\bigskip
\begin{center}
\Large\textbf{Praktikumsversuch 2: Umlaufbahnen}
\par\medskip
\normalsize Angewandte Informatik\sep
Wintersemester 2015/16\sep
Prof.~Dr.~Peter Gerwinski
\end{center}
Aufgabe: Schreiben Sie ein C-Programm, das die Umlaufbahn eines Satelliten
im Gravitationsfeld eines Zentralgestirns simuliert und in 3d-Grafik darstellt.
\begin{multicols}{2}
\begin{itemize}
\item
Ein Körper im Gravitationsfeld eines Zentralgestirns
erfährt eine Kraft in Richtung auf dessen Zentrum
mit dem Betrag:
\begin{equation}
F = \frac{m\cdot M\cdot G}{r^2}
\end{equation}
Hierbei ist $m$ die Masse des Satelliten,
$M$ die des Zentralgestirns,
$r$ der Abstand des Satelliten vom Zentrum und
$G$ eine Konstante (Gravitationskonstante).
\item
Die Gravitationskraft beschleunigt den Satelliten gemäß:
\begin{equation}
\vec{F} = m\cdot \vec{a}
\end{equation}
\item
Mit geeignetem Anfangsort und geeigneter Anfangsgeschwindigkeit
beschreibt der Satellit eine elliptische Umlaufbahn um das Zentralgestirn.
\item
Hinweis 1: Es genügt, das System in der $(x,y)$-\break Ebene zu betrachten
und die $z$-Koordinate konstant auf $0$ zu setzen.
\item
Für die Simulation betrachten wir das System in kurzen Zeitintervallen $dt$
und berechnen die Änderungen des Ortes $\vec{r} = (x,y)$
und der Geschwindigkeit $\vec{v} = (v_x,v_y)$ des Satelliten
mit Hilfe des expliziten Eulerschen Polygonzugverfahrens.
\item
Hinweis 2: Für die Zerlegung der Kraft $\vec{F}\/$
in $x$- und $y$-Komponenten benötigen Sie nur die Grundrechenarten
und insbesondere \emph{keine\/} trigonometrischen Funktionen.
\end{itemize}
\bigskip
\qquad\qquad\emph{Viel Erfolg!}
\vfill\strut
\end{multicols}
\vfill
\begingroup
\small
\setlength{\leftskip}{3cm}
Stand: 15.\ November 2015
% Soweit nicht anders angegeben:\\
Copyright \copyright\ 2014, 2015\quad Peter Gerwinski\\
Lizenz: \mylicense
Sie können diese Praktikumsunterlagen
einschließlich Quelltext und sonstiger Lehrmaterialien
unter \url{https://gitlab.cvh-server.de/pgerwinski/ainf.git} herunterladen.
\endgroup
\end{document}
../common/logo-hochschule-bochum-cvh-text.pdf
\ No newline at end of file
../common/logo-hochschule-bochum.pdf
\ No newline at end of file
../common/pgscript.sty
\ No newline at end of file
...@@ -31,8 +31,10 @@ ...@@ -31,8 +31,10 @@
\renewcommand*\familydefault{\sfdefault} \renewcommand*\familydefault{\sfdefault}
\usepackage{graphicx} \usepackage{graphicx}
\usepackage{pstricks} \usepackage{pstricks}
\usepackage{ifluatex}
% Repair kerning: Automatically insert "\kern{-0.15em}" between "//" % (in URLs). % Repair kerning: Automatically insert "\kern{-0.15em}" between "//" % (in URLs).
\ifluatex
\directlua{ \directlua{
local glyph = node.id ("glyph") local glyph = node.id ("glyph")
local function my_kerning (head) local function my_kerning (head)
...@@ -55,6 +57,7 @@ ...@@ -55,6 +57,7 @@
end end
luatexbase.add_to_callback ("kerning", my_kerning, "URL kerning") luatexbase.add_to_callback ("kerning", my_kerning, "URL kerning")
} }
\fi
\definecolor{blendedblue}{rgb}{0.2,0.2,0.7} \definecolor{blendedblue}{rgb}{0.2,0.2,0.7}
\definecolor{darkgreen}{rgb}{0.0,0.3,0.0} \definecolor{darkgreen}{rgb}{0.0,0.3,0.0}
......
No preview for this file type
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment