Boolesche Operationen in 2D
|
|
|
- Wolfgang Geiger
- vor 6 Jahren
- Abrufe
Transkript
1 1 Boolesche Operationen in 2D Bevor die komplizierten Operationen mit 3 dimensionalen Körpern gebracht werden, soll das Prinzip am Beispiel von 2 Flächen demonstriert werden. Die 2D Flächen seien Polygone, die durch einen geschlossenen Kantenzug gegeben sind. Das Prinzip lässt sich später auf Flächen, deren Berandung auch Kreisbogen enthält erweitern. Die betrachteten Boolesche Operationen seien: Vereinigung Durchschnitt Differenz Das Ergebnis ist evtl. ein Polygon mit Löchern oder auch mehrere disjunkte Polygone. Daher wird für eine Fläche folgende Deklaration genommen: type tface=record x,y:trealarray; loops:tintarray; nloops:integer; {loops gibt die Anzahl der Punkte des jeweiligen loops an nloops Anzahl der loops die Punkte der loops sind in x,y jeweils hintereinander Aussenloops sind Linkspolygone Innenloops(Löcher) sind Rechtspolygone } Die Koordinaten der ersten Berandung sind in dem Bereich; x[1]..x[loops[1]], y[1]..y[loops[1]] Danach folgt in dem Bereich: x[loops[1]+1]..x[loops[1]+loops[2]], y[loops[1]+1]..y[loops[1]+loops[2]] entweder ein Loch (Rechtspolygon) oder eine 2. äußere Berandung. Mit a,b,c:tface wird durch union(a,b,c); intersection(a,b,c); difference(a,b,c); jeweils aus a und b das Ergebnis c gebildet: Vereinigung Bei union(a,b,c) enthält c folgende Kanten: aus a, die nicht in b sind: AoutB(a,b,c)
2 2 aus b, die nicht in a sind: AoutB(b,a,c) aus a, die b berühren: AonB(a,b,c) und in gleicher Richtung laufen C:\C A DV orlesung\v2d1.p IC B A C:\CA DV orlesung\v2d2.p IC B A Dort wo A und B einen gemeinsamen Kantenabschnitt haben, ist die Richtung entgegen gesetzt, daher erscheint dieser Teil nicht in der Vereinigung. C:\CA DV orlesung\v2d3.pic A B Hier hat der gemeinsame Kantenabschnitt die gleiche Richtung, er erscheint daher in dem Ergebnis.
3 C:\CAD Vorlesung\v2d5.P IC 3 Durchschnitt Bei intersection(a,b,c) enthält c folgende Kanten: aus a, die in b sind: AinB(a,b,c) aus b, die in a sind: AinB(b,a,c) aus a, die b berühren: AonB(a,b,c) und in gleicher Richtung laufen C:\CA DV orlesung\v2d4.p IC Differenz Bei difference(a,b,c) enthält c folgende Kanten: aus a, die nicht in b sind: AoutB(a,b,c) aus b, die in a sind: AinB(b,a,c), mit jeweils umgekehrter Kantenorientierung. aus a, die Kanten von b berühren und in umgekehrter Orientierung laufen: AonBminus(a,b,c)
4 4 C:\CADVorlesung\v2d6.PIC C:\CADV orlesung\v2d7.p IC Das Polygon, das abgezogen wird, ist vollständig in dem ersten Polygon enthalten. Daher sind alle seine Kanten in dem ersten Polygon und sie bilden mit umgekehrter Kantenrichtung ein Loch in der Ergebnisfläche. Berechnung von AoutB Um die Kantenbereiche von A außerhalb von B zu berechnen, wird jede Kante von A mit jeder Kante von B geschnitten. Dies macht eine Funktion: procedure inters2l(xk,yk,xl,yl,xm,ym,xn,yn:real; var xs,ys:real; var s,t:real; var res:integer;dofix:boolean); {res -3 nur punkt -2 parallel -1 auf gleicher geraden 0 ausserhalb k-l oder m-n 1 auf rand k-l 2 auf rand m-n 3 innerhalb beider xs,ys Schnittpunkt bei res>=0 s: Position auf k-l t: Position auf m-n bei res=-1 s: position von xk,yk auf m-n t: Position von xl,yl auf m-n } Die Linie von (xk,yk) nach (xl,yl) wird mit der Linie von (xm,ym) nach (xn,yn) geschnitten.
5 5 Dabei können folgende Sonderfälle auftreten: Eine der beiden Linien ist nur ein Punkt, dann ist das Ergebnis -3. Die beiden Linien liegen auf der gleichen Geraden: Ergebnis -1 Die beiden Linien sind parallel: Ergebnis -2 In den anderen Fällen existiert zumindest ein Schnittpunkt der durch die beiden Linien gegebenen Geraden, der aber evtl. außerhalb der Linien oder auf einem Randpunkt liegt. Liegt er außerhalb einer der beiden Linien: Ergebnis= 0. Liegt er auf einem Randpunkt von k->l: Ergebnis= 1. Liegt er auf einem Randpunkt von m->n: Ergebnis= 2 Liegt er innerhalb beider Linien, also ein echter Schnittpunkt: Ergebnis= 3. Auf (xs,ys) wird der Schnittpunkt übergeben. s gibt die Position des Schnittpunktes zur Linie k->l wieder: Bei s=0 liegt er auf (xk,yk), bei s=1 auf (xl,yl), bei 0<s<1 liegt er dazwischen, bei <0 und >1 außerhalb. Analog gibt t die Lage bezogen auf die Linie m->n wieder. xlk:=xl-xk;ylk:=yl-yk; xnm:=xn-xm;ynm:=yn-ym; det:=xnm*ylk-ynm*xlk; Der Wert von det ist 0, wenn die Linien parallel sind. Sind die Linien nicht parallel kann weiter gemacht werden. detinv:=1.0/det; s:=(xnm*ymk-ynm*xmk)*detinv; t:=(xlk*ymk-ylk*xmk)*detinv; Ist dofix gesetzt werden die Werte für s und t in einem Bereich um 0 bzw. 1 auf 0 bzw. 1 gesetzt. Entsprechend s und t wird das Ergebnis gesetzt und der Schnittpunkt berechnet. Eine weitere Hilfsfunktion ist: procedure inface(xxx,yyy:real;var f:tface;var res:integer); Hier wird berechnet ob der Punkt (xxx,yyy) innerhalb der Fläche f liegt. Dabei sollen auch Löcher in der Fläche f berücksichtigt werden. Daher muss (xxx,yyy) gegen alle Berandungen der Fläche f getestet werden. Der test für ein Berandung erfolgt mit der Prozedur: procedure inpoly(x,y:real;var xp,yp:trealarray;n:integer; var res:integer); {res= 0 außerhalb 1 auf Eckpunkt 2 auf Rand 3 innerhalb} Die Berandung ist gegeben durch die Punktliste (xp,yp). Für den test werden jeweils die Winkelabstände der Linien von Testpunkt (x,y) zu benachbarten Punkten des Polygons summiert. Ist der Punkt außerhalb ist die Summe 0 ist er innerhalb ist die Summe 360. Liegt er auf dem Rand ist eine Winkeldifferenz 180 oder -180.
6 C:\CA DVorlesung\v2d8.pic 6 Um festzustellen ob eine Berandung der Fläche eine Innen- oder Außenberandung ist, wird die Funktion: function islinkspoly(var x,y:trealarray;n:integer):boolean; var xx,yy:trealarray; i,i2,i3:integer; x0,y0,x1,y1:real; s,w:real; begin s:=0; for i:=1 to n do begin if i=n then i2:=1 else i2:=i+1; if i2=n then i3:=1 else i3:=i2+1; x0:=x[i];y0:=y[i];x1:=x[i2];y1:=y[i2]; w:=diffwinkel(0,0,x1-x0,y1-y0,x[i3]-x1,y[i3]-y1); if w>180 then w:=w-360; s:=s+w; islinkspoly:=s>=0; Hier werden die Winkeldifferenzen der Linien des Polygons summiert. Bei einem Linkspolygon ist die Summe 360 bei einem Rechtpolygon ist die Summe Mit diesen Hilfsprozeduren kann inface implemeentiert werden. procedure inface(xxx,yyy:real;var f:tface;var res:integer); {res=0 außerhalb 1 auf Eckpunkt 2 auf Rand 3 innerhalb} var xx,yy:trealarray;nn:integer;
7 7 p,i,j:integer; links,wasinaussen:boolean; begin wasinaussen:=false; p:=0; with f do begin for i:=1 to nloops do begin nn:=loops[i]; for j:=1 to nn do begin inc(p); xx[j]:=x[p];yy[j]:=y[p]; links:=islinkspoly(xx,yy,nn); if not links or not wasinaussen then begin inpoly(xxx,yyy,xx,yy,nn,res); {res= 0 außerhalb 1 auf Eckpunkt 2 auf Rand 3 innerhalb} if (res=1)or(res=2) then exit; if links then begin if res=3 then wasinaussen:=true;// in Außenberandung end else begin if res=3 then begin res:=0;exit; // in einem Loch if wasinaussen then res:=3 else res:=0; procedure Aoutb(var a,b:tface; var x1,y1,x2,y2:trealarray;var n:integer); {Die Kanten aus a die nicht in b sind werden in den Listen x1,y1,x2,y2 hinzugefügt} var ii,i,j,jmin,i2,j2,nschnitt,res:integer; xt,yt,xxx1,yyy1,xxx2,yyy2,smin, xx,yy,xx1,yy1,xx2,yy2,s,t:real; xschnitt,yschnitt,sschnitt:trealarray; xa1,ya1,xa2,ya2:trealarray;na:integer; xb1,yb1,xb2,yb2:trealarray;nb:integer; begin face2segments(a,xa1,ya1,xa2,ya2,na); face2segments(b,xb1,yb1,xb2,yb2,nb); {Kanten von a und b in die Koordinatenfelder} {Für jede Kante von a alle Schnittpunkte mit b untersuchen} for i:=1 to na do begin nschnitt:=0; for j:=1 to nb do begin inters2l(xa1[i],ya1[i],xa2[i],ya2[i], xb1[j],yb1[j],xb2[j],yb2[j],xx,yy,s,t,res,true);
8 if res>=1 then begin inc(nschnitt); xschnitt[nschnitt]:=xx;yschnitt[nschnitt]:=yy; sschnitt[nschnitt]:=s; {schnitte sortieren} sortpoints(xschnitt,yschnitt,sschnitt,nschnitt); {Randschnitt und doppelte entfernen} for ii:=1 to nschnitt do begin if sschnitt[ii]<>0 then break; deletearr(xschnitt,nschnitt,ii); deletearr(yschnitt,nschnitt,ii); deletearr(sschnitt,nschnitt,ii); dec(nschnitt); for ii:=nschnitt downto 1 do begin if sschnitt[ii]<>1 then break; deletearr(xschnitt,nschnitt,ii); deletearr(yschnitt,nschnitt,ii); deletearr(sschnitt,nschnitt,ii); dec(nschnitt); ii:=1; while ii<nschnitt do begin j:=ii+1; while j<=nschnitt do begin if sschnitt[ii]<>sschnitt[j] then break; deletearr(xschnitt,nschnitt,j); deletearr(yschnitt,nschnitt,j); deletearr(sschnitt,nschnitt,j); dec(nschnitt); inc(ii); {testen welche Kantenteile in b} xxx1:=xa1[i];yyy1:=ya1[i]; if nschnitt=0 then begin xxx2:=xa2[i];yyy2:=ya2[i]; end else begin xxx2:=xschnitt[1];yyy2:=yschnitt[1] xt:=(xxx1+xxx2)/2;yt:=(yyy1+yyy2)/2; // Testen ob Mittelpunkt in b inface(xt,yt,b,res); if res=0 then begin inc(n); x1[n]:=xxx1;y1[n]:=yyy1;x2[n]:=xxx2;y2[n]:=yyy2; for ii:=1 to nschnitt do begin xxx1:=xxx2;yyy1:=yyy2; if ii=nschnitt then begin 8
9 9 xxx2:=xa2[i];yyy2:=ya2[i]; end else begin xxx2:=xschnitt[ii+1];yyy2:=yschnitt[ii+1] xt:=(xxx1+xxx2)/2;yt:=(yyy1+yyy2)/2; inface(xt,yt,b,res); if res=0 then begin inc(n); x1[n]:=xxx1;y1[n]:=yyy1;x2[n]:=xxx2;y2[n]:=yyy2; Jede Kante von A wird geteilt an den Schnittpunkten mit B. Für jeden Bereich wird ermittelt ob er in B liegt. Wenn ja, wird er der Linienliste hizugefügt. Analog arbeiten auch die anderen Funktionen: procedure Ainb(var a,b:tface; var x1,y1,x2,y2:trealarray;var n:integer); {Die Kanten aus a die nicht in b sind werden in den Listen x1,y1,x2,y2 hinzugefügt} procedure Aonb(var a,b:tface; var x1,y1,x2,y2:trealarray;var n:integer); {Die Kanten aus a die auf Kanten von b sind und in gleicher Richtung laufen werden in den Listen x1,y1,x2,y2 hinzugefügt} Hier müssen beim Test sich die beiden Kanten auf identischen Linien befinden und wenn sie sich überlappen und gleiche Richtung haben, wird der überlappende Teil genommen. Für die Berechnung der Differenz müssen die Kanten auf A ermittelt werden, die sich auf Kanten von B befinden, die in umgekehrter Richtung verlaufen. procedure Aonbminus(var a,b:tface; var x1,y1,x2,y2:trealarray;var n:integer); {Die Kanten aus a die auf Kanten von b sind und in umgekerter Richtung laufen werden in den Listen x1,y1,x2,y2 hinzugefügt} Die Funktion union hat dann folgenden Aufbau: procedure union(var a,b,c:tface); {c wird a vereinigt b} var ax1,ay1,ax2,ay2:trealarray;an:integer; bx1,by1,bx2,by2:trealarray;bn:integer; cx1,cy1,cx2,cy2:trealarray;cn:integer; x1,y1,x2,y2:trealarray;n:integer; begin
10 10 face2segments(a,ax1,ay1,ax2,ay2,an); face2segments(b,bx1,by1,bx2,by2,bn); n:=0; aoutb(a,b,x1,y1,x2,y2,n); aoutb(b,a,x1,y1,x2,y2,n); aonb(a,b,x1,y1,x2,y2,n); cn:=0; combinesegments(x1,y1,x2,y2,n,cx1,cy1,cx2,cy2,cn); segments2face(cx1,cy1,cx2,cy2,cn,c); Die Aufrufe der Prozeduren aoutb und aonb haben zusammen eine Folge von Linen geliefert. Diese müssen aber noch zu den Berandungen zusammengefasst werden. Zunächst werden Kanten, die in der gleichen Richtung laufen und sich am Anfang oder Ende berühren zu einer Kante zusammengefasst. Dies liefert die Prozedur: procedure combinesegments(var x1,y1,x2,y2:trealarray; n:integer; var xr1,yr1,xr2,yr2:trealarray; var nr:integer); Die n Kanten aus x1,y1,x2,y2 werden gesammelt und zu den Kanten in xr1,yr1,xr2,yr2 hinzugefügt. var done:array[1..maxpunkte]of boolean; phi:trealarray; phi1,xx1,yy1,xx2,yy2:real; i,j:integer; label 1; {Einsammeln der zusammenhängenden Segmente} begin for i:=1 to n do begin done[i]:=false;phi[i]:=getphi(x1[i],y1[i],x2[i],y2[i]); for i:=1 to n do begin if not done[i] then begin xx1:=x1[i];yy1:=y1[i];xx2:=x2[i];yy2:=y2[i];done[i]:=true; phi1:=phi[i]; {ein Segment in gleicher Richtung suchen das vorne oder hinten angehängt werden kann} for j:=i+1 to n do begin if not done[j] then begin if abs(phi1-phi[j])<1 then begin //gleiche Richtung if abs(xx1-x2[j])+abs(yy1-y2[j])<realtol then begin xx1:=x1[j];yy1:=y1[j];done[j]:=true; end else if abs(xx2-x1[j])+abs(yy2-y1[j])<realtol then begin xx2:=x2[j];yy2:=y2[j];done[j]:=true;
11 11 inc(nr); xr1[nr]:=xx1;yr1[nr]:=yy1;xr2[nr]:=xx2;yr2[nr]:=yy2; Dann müssen noch diese maximalen Kanten zu den Berandungen zusammengefasst werden. Dies liefert die Prozedur: procedure segments2face(var ax1,ay1,ax2,ay2;n:integer; var:tface); var x1:trealarray absolute ax1; var x2:trealarray absolute ax2; var y1:trealarray absolute ay1; var y2:trealarray absolute ay2; {Es wird vorausgesetzt, dass die Segmente schon zu max. kombiniert sind} var done:array[1..maxpunkte]of boolean; change,change2:boolean; firstx,firsty,xx1,yy1,xx2,yy2:real; i,np:integer; label 1; begin np:=0; for i:=1 to n do done[i]:=false; with f do begin nloops:=0; if n<2 then exit; change:=true; while change do begin {ein noch nicht bearbeitetes Segment als Anfang eines loops suchen} for i:=1 to n do begin if not done[i] then begin xx1:=x1[i];yy1:=y1[i];xx2:=x2[i];yy2:=y2[i];done[i]:=true; goto 1; break; 1: change:=true; inc(nloops);loops[nloops]:=1; firstx:=xx1;firsty:=yy1; inc(np); x[np]:=xx1;y[np]:=yy1; {ein Segment suchen das hinten angehängt werden kann } change2:=true; while change2 do begin change2:=false; for i:=1 to n do begin if not done[i] then begin
12 12 if abs(xx2-x1[i])+abs(yy2-y1[i])<realtol then begin inc(loops[nloops]); inc(np); x[np]:=x1[i];y[np]:=y1[i]; xx2:=x2[i];yy2:=y2[i];change2:=true; done[i]:=true; {es wird kein Segment mehr gefunden, jetzt sollte eigentlich xx2=firstx und yy2:=firsty sein} if not eqreal(xx2,firstx) or not eqreal(yy2,firsty)then writeln('error ');
Boolesche Operationen und lokale Manipulationen
1 Boolesche Operationen und lokale Manipulationen Mit Hilfe Boolescher Operatoren werden komplexe Körper aus Instanzen generischer Grundkörper konstruiert.. Grundkörper Aus den Grundkörpern erzeugter Körper
Featurebasierte 3D Modellierung
1 Featurebasierte 3D Modellierung Moderne 3D arbeiten häufig mit einer Feature Modellierung. Hierbei gibt es eine Reihe von vordefinierten Konstruktionen, die der Reihe nach angewandt werden. Diese Basis
Das Divide - and - Conquer Prinzip. Quicksort Formulierung und Analyse des Prinzips Geometrisches Divide and Conquer - Closest-Pair - Segmentschnitt
Divide and Conquer Das Divide - and - Conquer Prinzip Quicksort Formulierung und Analyse des Prinzips Geometrisches Divide and Conquer - Closest-Pair - Segmentschnitt 2 Quicksort: Sortieren durch Teilen
Raytracing. Beschleunigungsverfahren
Raytracing Beschleunigungsverfahren Naives/brute force Raytracing Komplexität: mxn p Auflösung des Bildes Anzahl der Primitives O (mxnxp) nur für die Primärstrahlen Raytracing Beschleunigungsverfahren
Ray Tracing. 2. Ray Tracing-Prinzip und -Algorithmen. 3. Schnittpunkt- und Normalenberechnung
1. Vorbemerkungen 2. -Prinzip und -Algorithmen 3. Schnittpunkt- und Normalenberechnung 4. Verbesserte -Techniken 4.1 Supersampling 4.2 Adaptives Supersampling 4.3 Stochastisches Supersampling 4.4 Verteiltes
5. Bäume und Minimalgerüste
5. Bäume und Minimalgerüste Charakterisierung von Minimalgerüsten 5. Bäume und Minimalgerüste Definition 5.1. Es ein G = (V, E) ein zusammenhängender Graph. H = (V,E ) heißt Gerüst von G gdw. wenn H ein
Kreis - Übungen. 1) Die y-achse ist am Punkt A eine Tangente an den Kreis. Mit dem noch nicht bekannten "Zwischenwert"
Kreis - Übungen Wenn die "Kreisgleichung" gesucht ist, sind der Mittelpunkt und der Radius anzugeben. Es ist möglich, dass mehrere Kreise eine Aufgabenstellung erfüllen. 1) Ein Kreis berührt die y-achse
Geometrie I. Sebastian Redinger Informatik 2 Programmiersysteme Martensstraße Erlangen
Geometrie I Sebastian Redinger 01.07.2015 Informatik 2 Programmiersysteme Martensstraße 3 91058 Erlangen Gliederung Grundlagen CCW Polygone Picks Theorem Konvexe Hülle - Graham Scan - Jarvis March 2 Gliederung
Übungsblatt 7 - Voronoi Diagramme
Karlsruher Institut für Technologie Algorithmische Geometrie Fakultät für Informatik Sommersemester 2012 ITI Wagner Martin Nöllenburg/Andreas Gemsa Übungsblatt 7 - Voronoi Diagramme 1 Voronoi-Zellen Sei
C.3 Funktionen und Prozeduren
C3 - Funktionen und Prozeduren Funktionsdeklarationen in Pascal auch in Pascal kann man selbstdefinierte Funktionen einführen: Funktionen und Prozeduren THEN sign:= 0 Funktion zur Bestimmung des Vorzeichens
Hallo Welt! für Fortgeschrittene. Geometrie I. Philipp Erhardt. 19. Juli Philipp Erhardt Geometrie I 19. Juli / 27
Hallo Welt! für Fortgeschrittene Geometrie I Philipp Erhardt 19. Juli 2011 Philipp Erhardt Geometrie I 19. Juli 2011 1 / 27 Gliederung 1 Grundlagen 2 CCW 3 Punkt-in-Polygon 4 Pick s Theorem 5 Konvexe Hülle
M. Pester 29. Ein konvexes d-polytop ist eine begrenzte d-dimensionale polyedrale Menge. (d = 3 Polyeder, d = 2 Polygon)
M. Pester 29 6 Konvexe Hülle 6.1 Begriffe Per Definition ist die konvexe Hülle für eine Menge S von lich vielen Punkten die kleinste konvexe Menge, die S enthölt (z.b. in der Ebene durch ein umspannes
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls;
unit sudoku; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls; type TCvD_Sudoku = class(tform) Panel1: TPanel; Bevel1: TBevel; Bevel2:
Füllen von Primitiven
Füllen von Primitiven Basisproblem der 2D-Graphik Anwendung: füllen beliebiger Flächen (Polygone, Freiformkurven) Darstellung von Buchstaben dicke Primitive (Linien, Kreise, Kurven), Teilproblem in der
Uberblick 1. Problemstellung 2. Kongurationsraum 3. Bewegungsplanung fur einen Punktroboter 4. Minkowski Summen 5. Pseudo-Scheiben 6. Bewegungsplanung
Vorlesung Geometrische Algorithmen Bewegungsplanung fur Roboter (Robot Motion Planning) Sven Schuierer Uberblick 1. Problemstellung 2. Kongurationsraum 3. Bewegungsplanung fur einen Punktroboter 4. Minkowski
Geometrische Algorithmen Segmentschnitt
Folie 1 von 36 Geometrische Algorithmen Segmentschnitt Folie 2 von 36 Segmentschnitt Übersicht Zwei Segmente Lage zweier Segmente Prüfung auf Schnittfreiheit Formeln zum Geradenschnitt Feststellen des
Geometrische Algorithmen Segmentschnitt
Folie 1 von 36 Geometrische Algorithmen Segmentschnitt Folie 2 von 36 Segmentschnitt Übersicht Zwei Segmente! Lage zweier Segmente! Prüfung auf Schnittfreiheit! Formeln zum Geradenschnitt! Feststellen
Kurs zur Ergänzungsprüfung Darstellende Geometrie CAD. Ebenes Zeichnen (2D-CAD) und die ersten Befehle
CAD Ebenes Zeichnen (2D-CAD) und die ersten Befehle Schnellzugriff-Werkzeugkasten (Quick Access Toolbar) Registerkarten (Tabs) Gruppenfenster (Panels) Zeichenfläche Befehlszeile: für schriftl. Eingabe
Liniensegmentschnitt. Doppelt verkettete Kantenliste. Überlagerung von 2 ebenen Graphen. Boolsche Operatoren für einfache Polygone (LEDA)
Liniensegmentschnitt Motivation, Überlagerung von Karten, Problemformulierung Ein einfaches Problem und dessen Lösung mit Hilfe des Sweep-Line Prinzips Output-sensitiver Liniensegmentschnittalgorithmus
Kurs 1613 Einführung in die imperative Programmierung Musterlösung zur Klausur am
1 Lösung 1 ( 4+4 Punkte) a) procedure VerschiebeZyklisch ( iofeld : tfeld); { verschiebt die Werte innerhalb eines Feldes eine Position nach rechts; der Wert iofeld[max] wird nach iofeld[1] übertragen
2.7.1 Inside-Test Konvexe Hülle Nachbarschaften Schnittprobleme
2.7 Geometrische Algorithmen 2.7.1 Inside-Test 2.7.2 Konvexe Hülle 2.7.3 Nachbarschaften 2.7.4 Schnittprobleme 1 2.7 Geometrische Algorithmen 2.7.1 Inside-Test 2.7.2 Konvexe Hülle 2.7.3 Nachbarschaften
Seminar. Algorithmische Geometrie
Seminar Algorithmische Geometrie WS 2000/2001 Thema: Konvexe Hülle Mirko Dennler 21439 Inhaltsverzeichnis Konvexe Hülle 1. Problemstellung 3 2. GRAHAMS SCAN 4-5 3. JARVIS' MARCH 5-6 4. QUICK HULL 6-7 5.
Vorlesung Algorithmische Geometrie. Streckenschnitte. Martin Nöllenburg INSTITUT FÜR THEORETISCHE INFORMATIK FAKULTÄT FÜR INFORMATIK
Vorlesung Algorithmische Geometrie INSTITUT FÜR THEORETISCHE INFORMATIK FAKULTÄT FÜR INFORMATIK Martin Nöllenburg 24.04.2011 Überlagern von Kartenebenen Beispiel: Gegeben zwei verschiedene Kartenebenen,
Voronoi-Diagramme. Dr. Martin Nöllenburg Vorlesung Algorithmische Geometrie INSTITUT FÜR THEORETISCHE INFORMATIK FAKULTÄT FÜR INFORMATIK
Vorlesung Algorithmische Geometrie INSTITUT FÜR THEORETISCHE INFORMATIK FAKULTÄT FÜR INFORMATIK Martin Nöllenburg 29.05.2011 Das Postamt-Problem b(p, q) = {x R 2 : xp = xq } p q h(p, q) h(q, p) = {x :
Excel Funktionen durch eigene Funktionen erweitern.
Excel Funktionen durch eigene Funktionen erweitern. Excel bietet eine große Anzahl an Funktionen für viele Anwendungsbereiche an. Doch es kommt hin und wieder vor, dass man die eine oder andere Funktion
Kurs 1612 Konzepte imperativer Programmierung Musterlösung zur Nachklausur am
1 Aufgabe 1 a) Da Effizienzbetrachtungen bei der Lösung der Aufgabe keine Rolle spielen, wählen wir einen einfachen, aber ineffizienten Algorithmus mit zwei ineinander verschachtelten for-schleifen. Dadiefor-Schleifen
Uberblick 1. Kurzeste Wege 2. Sichtbarkeitsgraphen 3. Berechnung des Sichtbarkeitsgraphen 4. Kurzeste Wege fur polygonale Roboter 1
Vorlesung Geometrische Algorithmen Sichtbarkeitsgraphen und kurzeste Wege Sven Schuierer Uberblick 1. Kurzeste Wege 2. Sichtbarkeitsgraphen 3. Berechnung des Sichtbarkeitsgraphen 4. Kurzeste Wege fur polygonale
Stud.-Nummer: Datenstrukturen & Algorithmen Seite 1
Stud.-Nummer: Datenstrukturen & Algorithmen Seite 1 Aufgabe 1. / 16 P Instruktionen: 1) In dieser Aufgabe sollen Sie nur die Ergebnisse angeben. Diese können Sie direkt bei den Aufgaben notieren. 2) Sofern
1.4 Die Ackermannfunktion
a : N 2 N : Beispiele: a(0, y) = y + 1, a(x, 0) = a(x 1, 1), x > 0, a(x, y) = a(x 1, a(x, y 1)), x, y > 0. Beh.: a(1, y) = y + 2 Bew. durch Induktion über y: a(1, 0) = a(0, 1) = 2 = 0+2. a(1, y + 1) =
2.1. Konvexe Hülle in 2D
Wir wollen die konvexe Hülle einer Menge von Punkten P = {p 1,..., p n } in der Ebene R 2 bestimmen. y y x x Def. 21: Eine Teilmenge S der Ebene ist konvex gdw für jedes Paar das Liniensegment pq in S
Geometrische Algorithmen Segmentschnitt. Lernmodul 7: Geo-Algorithmen und -Datenstrukturen - Segmentschnitt
Folie 1 von 37 Geometrische Algorithmen Segmentschnitt Folie 2 von 37 Segmentschnitt Übersicht Zwei Segmente Lage zweier Segmente Prüfung auf Schnittfreiheit Formeln zum Geradenschnitt Feststellen des
Sichtbarkeitsgraphen. Dr. Martin Nöllenburg Vorlesung Algorithmische Geometrie
Vorlesung Algorithmische Geometrie LEHRSTUHL FÜR ALGORITHMIK I INSTITUT FÜR THEORETISCHE INFORMATIK FAKULTÄT FÜR INFORMATIK Martin Nöllenburg 12.07.2011 Bewegungslanung für Roboter Ideen?? Problem: Gegeben
(Aufgaben zu Wertzuweisungen siehe Vorlesungsbeilage S. 49)
Anweisungen Eine Anweisung ist eine in einer beliebigen Programmiersprache abgefaßte Arbeitsvorschrift für einen Computer. Jedes Programm besteht aus einer bestimmten Anzahl von Anweisungen. Wir unterscheiden
Der Satz von Menger. und seine Anwendung auf Algorithmen zur Berechnung von Ecken und Kanten
Der Satz von Menger und seine Anwendung auf Algorithmen zur Berechnung von Ecken und Kanten Dozent: Prof. Dr. Iwanowski Erarbeitet von: Kontakt: Katharina Schmitz [email protected] Erstellt im WS 2004/05
Schwellenwertelemente. Rudolf Kruse Neuronale Netze 8
Schwellenwertelemente Rudolf Kruse Neuronale Netze 8 Schwellenwertelemente Ein Schwellenwertelement (Threshold Logic Unit, TLU) ist eine Verarbeitungseinheit für Zahlen mitneingängenx,...,x n und einem
Methodische Grundlagen des Software Engineering - Übung 9
Engineering - Übung 9 9 Prozess und Softwarequalität Abgabe der Hausaufgaben am Anfang der jeweiligen Präsenzübung am 14.06.2011 bzw. 15.06.2011. Hinweise und Kontakt: Veranstaltungsseite 1 9.1 Grundlagen
Voronoi-Diagramme INSTITUT FÜR THEORETISCHE INFORMATIK FAKULTÄT FÜR INFORMATIK. Dr. Martin Nöllenburg Vorlesung Algorithmische Geometrie
Vorlesung Algorithmische Geometrie INSTITUT FÜR THEORETISCHE INFORMATIK FAKULTÄT FÜR INFORMATIK Martin Nöllenburg 03.06.2014 1 Das Postamt-Problem b(p, q) = {x 2 R 2 : xp = xq } p q h(p, q) h(q, p) = {x
Der Algorithmus von Bresenham
Der Algorithmus von Bresenham Das Bresenham-Verfahren beruht im wesentlichen auf zwei grundsätzliche Beobachtungen: - Es reicht ein Verfahren aus um Geraden mit einer Steigung im Bereich von null bis eins
Algorithmische Geometrie: Schnittpunkte von Strecken
Algorithmische Geometrie: Schnittpunkte von Strecken Nico Düvelmeyer WS 2009/2010, 3.11.2009 3 Phasen im Algorithmenentwurf 1. Konzentration auf das Hauptproblem 2. Verallgemeinerung auf entartete Eingaben
Euklidischer Algorithmus
Euklidischer Algorithmus Ermitteln des größten gemeinsamen Teilers mit Euklid: function ggt (m, n) Hierbei ist m begin 0undn 0vorausgesetzt. if m = 0 then return n else return ggt (n mod m, m) fi end Man
Kurs 1613 Einführung in die imperative Programmierung Musterlösung zur Nachklausur am
1 Aufgabe 1 Analysiert man das Verfahren anhand des angegebenen Beispiels, ist schnell zu erkennen, dass das erste Element von infeld2 nach outfeld an Index 2 kopiert wird, das zweite den Index 4 bekommt,
Kurs 1613 Einführung in die imperative Programmierung
Aufgabe 1 Gegeben sei die Prozedur BubbleSort: procedure BubbleSort(var iofeld:tfeld); { Programm sortiert das Eingabefeld iofeld aufsteigend var hilf:integer; i:tindex; j:tindex; vertauscht:boolean; i:=1;
Vorsichtige Programmierer verwenden Inkrement- Operatoren nicht in komplizierteren Ausdrücken
Vorsichtige Programmierer verwenden Inkrement- Operatoren nicht in komplizierteren Ausdrücken Aufgabe 1.60 a) Welchen Wert erhält die boolesche Variable z in folgendem Beispiel? int i = 2, j = 5; boolean
INFORMATIK FÜR BIOLOGEN
Technische Universität Dresden 15012015 Institut für Theoretische Informatik Professur für Automatentheorie INFORMATIK FÜR BIOLOGEN Musterklausur WS 2014/15 Studiengang Biologie und Molekulare Biotechnologie
Kurs 1613 Einführung in die imperative Programmierung Lösungen der Aufgaben zum Studientag
Aufgabe 1 Gegeben sei die Prozedur BubbleSort: procedure BubbleSort(var iofeld:tfeld); { Programm sortiert das Eingabefeld iofeld aufsteigend var hilf:integer; i:tindex; j:tindex; vertauscht:boolean; i:=1;
Übungskomplex Reelle Zahlen. Rechnen mit Gleitkommazahlen
Übungskomplex Reelle Zahlen Rechnen mit Gleitkommazahlen Hinweise zur Übung Benötigter Vorlesungsstoff Einheiten 1-3 (C-Tutorial) Einheiten Reelle Zahlen 61 Aufgabe Kreisberechnung a) Schreiben Sie zwei
Geometrie I. Polygone. Dominik Huber Hallo Welt! für Fortgeschrittene. Informatik 2 Programmiersysteme Martensstraße Erlangen
Geometrie I Polygone Dominik Huber 28.5.2018 Hallo Welt! für Fortgeschrittene Informatik 2 Programmiersysteme Martensstraße 3 91058 Erlangen Gliederung Wiederholung Analytische Geometrie Abstand Punkt
= a) Berechnen Sie die fehlenden Funktionswerte der Wertetabelle. n
Info 12 IF1 GK (GA) Bearbeitungszeit: 135 min Seite 1 Aufgabe 1: rekursive Funktionen Die Hofstadter-Funktion ist definiert durch: hof ( n hof ( n 1)) + hof ( n hof ( n 2)) hof ( n) = 1 a) Berechnen Sie
Einstieg in die Informatik mit Java
1 / 41 Einstieg in die Informatik mit Java Weitere Anweisungen Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 41 1 Überblick 2 Verbundanweisung 3 Bedingte Anweisung 4 Auswahlanweisung
Lösungen zu den Übungsaufgaben zu Feldern
Lösungen zu den Übungsaufgaben zu Feldern Aufgabe 1: Punktberechnung procedure TForm1.Button1Click(Ser: TObject); punkt = array[1..3] of double; d, p, q: punkt; abstand: double; // Eingabe p[1]:= StrToFloat(Edit1.Text);
Hallo Welt für Fortgeschrittene
Hallo Welt für Fortgeschrittene Geometrie II Benjamin Zenke Informatik 2 Programmiersysteme Martensstraße 3 91058 Erlangen Inhalt Closest Pair Divide & Conquer Bereichssuche Gitterverfahren k-d-tree Sweep-Line-Algorithmen
Klausur zu Grundlagen der Informatik I mit Lösungen 28. Februar 2005 (WS 2004/2005) Dr. Andreas F. Borchert Norbert Heidenbluth
Klausur zu Grundlagen der Informatik I mit Lösungen 28. Februar 2005 (WS 2004/2005) Dr. Andreas F. Borchert Norbert Heidenbluth A Nr Max Bewertung 1 14 2 12 3 14 4 12 5 12 6 12 7 12 8 12 Summe 100 Klausur
WS 2009/10. Diskrete Strukturen
WS 2009/10 Diskrete Strukturen Prof. Dr. J. Esparza Lehrstuhl für Grundlagen der Softwarezuverlässigkeit und theoretische Informatik Fakultät für Informatik Technische Universität München http://www7.in.tum.de/um/courses/ds/ws0910
Berechnung von Abständen
3. Kreis- und Wegeprobleme Abstände in Graphen Abstände in Graphen Definition 3.4. Es sei G = (V, E) ein Graph. Der Abstand d(v, w) zweier Knoten v, w V ist die minimale Länge eines Weges von v nach w.
Algorithmische Techniken für Geometrische Probleme
Algorithmische Techniken für Geometrische Probleme Berthold Vöcking 14. Juni 2007 Inhaltsverzeichnis 1 Die Sweepline-Technik 2 1.1 Schnitte orthogonaler Liniensegmente............... 2 1.2 Schnitte beliebiger
Programmieren I. Kapitel 5. Kontrollfluss
Programmieren I Kapitel 5. Kontrollfluss Kapitel 5: Kontrollfluss Ziel: Komplexere Berechnungen im Methodenrumpf Ausdrücke und Anweisungen Fallunterscheidungen (if, switch) Wiederholte Ausführung (for,
Optimale Lösungen mit Greedy-Strategie erfordern Optimalität der Greedy-Wahl. Beispiele für optimale Greedy-Lösungen
Wiederholung Optimale Lösungen mit Greedy-Strategie erfordern Optimalität der Greedy-Wahl unabhängig von Subproblemen Optimalität der Subprobleme Beispiele für optimale Greedy-Lösungen Scheduling Problem
Arithmetik in der tcsh
Arithmetik in der tcsh Variablen speichern Zeichenketten (also Strings/Wörter) @ statt set Interpretation als arithmetische Ausdrücke (aus Ziffern, (, ), +, -, *, /, % bestehend) Beispiele: @ var = (3
Die Geometrie der Tischlerei
- Sommersemester 2009 Benjamin Bortfeldt Die Geometrie der Tischlerei 1 Worum geht es? Problem: Wir wollen ein einfaches Polygon P aus einer oder mehreren Holzplatten aussägen und dürfen dazu nur eine
Vorlesung Algorithmische Geometrie Konvexe Hülle im R 3
Vorlesung Algorithmische Geometrie Konvexe Hülle im R 3 LEHRSTUHL FÜR ALGORITHMIK I INSTITUT FÜR THEORETISCHE INFORMATIK FAKULTÄT FÜR INFORMATIK Andreas Gemsa 26.06.2012 Prüfung! Termine: 20. Juli 27.
Klausur. 18. Juli 2008, 10:15-12:15 Uhr. Name:... Matrikelnummer:... Anzahl beschriebener Blätter (ohne Aufgabenblatt):... D(p) : Y = p x X + p y
GRUNDZÜGE DER ALGORITHMISCHEN GEOMETRIE Klausur 18. Juli 2008, 10:15-12:15 Uhr Name:................................... Matrikelnummer:................................... Anzahl beschriebener Blätter (ohne
5. Übung - Kanalkodierung/Programmierung
5. Übung - Kanalkodierung/Programmierung Informatik I für Verkehrsingenieure Aufgaben inkl. Beispiellösungen 1. Aufgabe: Kanalkodierung a Folgende Kodes stehen Ihnen zur Verfügung: Kode 1: 0000000 Kode
Teil VI: Prozeduren Feld-Parameter & Typen. 1. Offene ARRAY-Parameter 2. Prozedurtypen und -variablen
Teil VI: Prozeduren Feld-Parameter & Typen 1. Offene ARRAY-Parameter 2. Prozedurtypen und -variablen Offene ARRAY-Parameter Motivation Problem : geg.: mehrere deklarierte Felder unterschiedlicher Längen,
Übungen 4 Gerade, Ebene - Kurze Aufgaben Ebene: Spurpunkte, Spurgerade, Achsenabschnittsform Gerade, Ebene U04 Übungen 4 - Seite 1 (von 5)
Übungen Gerade, Ebene - Kurze Aufgaben ) Gesucht ist Normalenform einer Ebene, die den Punkt P( ) enthält und auf der x- Achse senkrecht steht. ) Gegeben ist die Ebene E: x ( Gesucht ist der Winkel zwischen
Sortieren. Maple sortiert; Unordnung schaffen. > restart;
restart; Sortieren Maple sortiert; Unordnung schaffen Vorbemerkung: Maple kann schon selber sortieren. Dazu erzeugen wir erstmal eine unsortierte Liste: > r := rand(1..100): > l := [seq(r(), i=1..10)];
Boolean Wertemenge: Wahrheitswerte {FALSE,TRUE}, auch {0,1} Deklaration:
Boolean Wertemenge: Wahrheitswerte {,}, auch {,} Deklaration: VAR present,billig,laut,gefunden : BOOLEAN; Ein-/Ausgabe: keine! Operatoren: Negation, Verneinung NOT ~ Konjunktion, logisches UND AND & Disjunktion,
Syntax der Sprache PASCAL
Syntax der Sprache PASCAL Buchstaben A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z Ziffern 0 1 2 3 4 5 6 7 8 9 Sonderzeichen und Wortsymbole +
Effiziente Algorithmen
Effiziente Algorithmen Aufgabe 5 Gruppe E Martin Schliefnig, 0160919 Christoph Holper, 9927191 Ulrike Ritzinger, 0125779 1. Problemstellung Gegeben ist eine Datei, die eine Million reelle Zahlen enthält.
4. Kreis- und Wegeprobleme Abstände in Graphen
4. Kreis- und Wegeprobleme Abstände in Graphen Abstände in Graphen Definition 4.4. Es sei G = (V,E) ein Graph. Der Abstand d(v,w) zweier Knoten v,w V ist die minimale Länge eines Weges von v nach w. Falls
Kurs 1613 Einführung in die imperative Programmierung Musterlösung zur Klausur am
Kurs 1613 Einführung in die imperative Programmierung 1 Aufgabe 1 procedure NachVorn( inwert: integer; var iorefanfang: trefelement); {Sucht das erste vorkommende Element mit inwert in der info-komponente
Geometrische Algorithmen Einige einfache Definitionen: Ist ein Punkt in einem Polygon? Punkt-in-Polygon-Problem. Das Punkt-in-Polygon-Problem
Geometrische Algorithmen Einige einfache Definitionen: Punkt: im n-dimensionalen Raum ist ein n-tupel (n Koordinaten) Gerade: definiert durch zwei beliebige Punkte auf ihr Strecke: definiert durch ihre
Zweizusammenhang und starker Zusammenhang
.. Zeizusammenhang und starker Zusammenhang Carsten Gutenger Vorlesung Algorithmen und Datenstrukturen WS /. Januar Zeizusammenhang Betrachte ein Netzerk (Graph) Z.B. Computernetzerk, Flug- oder Schienennetzerk
Wie funktioniert das Sortieren einer Reihe von Zufallszahlen mit Quicksort?
Wie funktioniert das Sortieren einer Reihe von Zufallszahlen mit Quicksort? Seite 1 Sehen wir uns zunächst einmal die grundsätzliche Vorgehensweise des Programmes an, ohne auf Einzelheiten oder Fachtermini
Studienseminar Koblenz - Fachseminar Informatik Visualisierung von Sortieralgorithmen
Thema: Visualisieren von Sortieralgorithmen in Delphi (am Beispiel: Bubblesort und Quicksort) Ziel ist es, eine Animation des Bubblesort- und Quicksort-Algorithmus in Delphi für die Anwung im Unterricht
f. y = 0,2x g. y = 1,5x + 5 h. y = 4 6x i. y = 4 + 5,5x j. y = 0,5x + 3,5
11. Lineare Funktionen Übungsaufgaben: 11.1 Zeichne jeweils den Graphen der zugehörigen Geraden a. y = 0,5x 0,25 b. y = 0,1x + 2 c. y = 2x 2 d. 2x + 4y 5 = 0 e. y = x f. y = 0,2x g. y = 1,5x + 5 h. y =
11.1 Grundlagen - Denitionen
11 Binärbäume 11.1 Grundlagen - Denitionen Denition: Ein Baum ist eine Menge, die durch eine sog. Nachfolgerrelation strukturiert ist. In einem Baum gilt: (I) (II) 1 Knoten w ohne VATER(w), das ist die
ÜBUNGEN ZUR REKURSION
ÜBUNGEN ZUR REKURSION Aufgabe 1: Auf einem früheren Arbeitsblatt wurde eine rekursive DELPHI-Funktion zur Berechnung der Quadratzahl zu einer natürlichen Zahl n vorgestellt, welche mathematisch wie folgt
