ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462...
Transcript of ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462...
![Page 1: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.](https://reader035.fdocuments.us/reader035/viewer/2022081523/5fdb9497c3726529cf17ebcc/html5/thumbnails/1.jpg)
YHL Container Class 1
ECE 462Object-Oriented Programming
using C++ and Java
Container Classes
Yung-Hsiang [email protected]
![Page 2: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.](https://reader035.fdocuments.us/reader035/viewer/2022081523/5fdb9497c3726529cf17ebcc/html5/thumbnails/2.jpg)
YHL Container Class 2
Why Container Classes?
• Many programs require arrays, vectors, lists, queues, stacks, sets ... to store information.
• Both C++ and Java provide container classes that automatically manage memory: allocate additional memory when more elements are added.
• The supported container classes greatly reduce the amount of code needed by programmers and improve productivity.
• Container classes and OOP are closely related: – a container can hold objects of derived classes– polymorphism properly invokes the correct methods
![Page 3: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.](https://reader035.fdocuments.us/reader035/viewer/2022081523/5fdb9497c3726529cf17ebcc/html5/thumbnails/3.jpg)
YHL Container Class 3
Container Class (For Code Reuse)
• A container needs to be able to hold items of different types (i.e. classes). Examples– list of strings, integers, floating points, student objects– queues of customer objects, car objects– maps: name → address, student ID → name, course
title → classroom• C++ standard template library (STL) and Java container
classes provide such functionality.
![Page 4: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.](https://reader035.fdocuments.us/reader035/viewer/2022081523/5fdb9497c3726529cf17ebcc/html5/thumbnails/4.jpg)
YHL Container Class 4
Select Container Class
• random or sequential accesses?• allow unique or duplicate items?• O(1) or O(N) for array-like access (using [index])• efficient insert / delete?
– front– end– middle
• Java containers cannot store primitive types (int, char, float ...) and can store objects only. C++ containers can store primitives.
![Page 5: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.](https://reader035.fdocuments.us/reader035/viewer/2022081523/5fdb9497c3726529cf17ebcc/html5/thumbnails/5.jpg)
YHL Container Class 5
Efficiency
O(1)O(N)O(N)insert/delete in middle
O(1)O(1)+O(1)+insert/delete at end
O(1)O(1)+O(N)insert/delete at front
O(N)O(1)O(1)array-like access
listdequevectoroperation
N: current number of items
![Page 6: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.](https://reader035.fdocuments.us/reader035/viewer/2022081523/5fdb9497c3726529cf17ebcc/html5/thumbnails/6.jpg)
YHL Container Class 6
Java Containers
![Page 7: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.](https://reader035.fdocuments.us/reader035/viewer/2022081523/5fdb9497c3726529cf17ebcc/html5/thumbnails/7.jpg)
YHL Container Class 7
Java List
![Page 8: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.](https://reader035.fdocuments.us/reader035/viewer/2022081523/5fdb9497c3726529cf17ebcc/html5/thumbnails/8.jpg)
YHL Container Class 8
![Page 9: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.](https://reader035.fdocuments.us/reader035/viewer/2022081523/5fdb9497c3726529cf17ebcc/html5/thumbnails/9.jpg)
YHL Container Class 9
Interface and Class
• A Java interface serves as an abstract class and cannot be instantiated.
• An interface can be implemented by classes.• Typically, an interface is a common base for several
related classes, for example, interface List as the base of ArrayList, LinkedList, Stack, and Vector.
![Page 10: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.](https://reader035.fdocuments.us/reader035/viewer/2022081523/5fdb9497c3726529cf17ebcc/html5/thumbnails/10.jpg)
YHL Container Class 10
![Page 11: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.](https://reader035.fdocuments.us/reader035/viewer/2022081523/5fdb9497c3726529cf17ebcc/html5/thumbnails/11.jpg)
YHL Container Class 11
![Page 12: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.](https://reader035.fdocuments.us/reader035/viewer/2022081523/5fdb9497c3726529cf17ebcc/html5/thumbnails/12.jpg)
YHL Container Class 12
![Page 13: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.](https://reader035.fdocuments.us/reader035/viewer/2022081523/5fdb9497c3726529cf17ebcc/html5/thumbnails/13.jpg)
YHL Container Class 13
![Page 14: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.](https://reader035.fdocuments.us/reader035/viewer/2022081523/5fdb9497c3726529cf17ebcc/html5/thumbnails/14.jpg)
YHL Container Class 14
![Page 15: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.](https://reader035.fdocuments.us/reader035/viewer/2022081523/5fdb9497c3726529cf17ebcc/html5/thumbnails/15.jpg)
YHL Container Class 15
Java Set
![Page 16: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.](https://reader035.fdocuments.us/reader035/viewer/2022081523/5fdb9497c3726529cf17ebcc/html5/thumbnails/16.jpg)
YHL Container Class 16
![Page 17: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.](https://reader035.fdocuments.us/reader035/viewer/2022081523/5fdb9497c3726529cf17ebcc/html5/thumbnails/17.jpg)
YHL Container Class 17
![Page 18: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.](https://reader035.fdocuments.us/reader035/viewer/2022081523/5fdb9497c3726529cf17ebcc/html5/thumbnails/18.jpg)
YHL Container Class 18
no duplicate element in Setelements sorted
![Page 19: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.](https://reader035.fdocuments.us/reader035/viewer/2022081523/5fdb9497c3726529cf17ebcc/html5/thumbnails/19.jpg)
YHL Container Class 19
Java Map
![Page 20: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.](https://reader035.fdocuments.us/reader035/viewer/2022081523/5fdb9497c3726529cf17ebcc/html5/thumbnails/20.jpg)
YHL Container Class 20
Map (Hash Table)
• array: integer → element (object)• map: key (object, integer, or string ...) → value (object)• example:
– name → phone number– student ID → department– city name → zip code
• Keys must be unique and do not have to be continuous (unlike array indexes). Values do not have to be unique.
![Page 21: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.](https://reader035.fdocuments.us/reader035/viewer/2022081523/5fdb9497c3726529cf17ebcc/html5/thumbnails/21.jpg)
YHL Container Class 21
Java MapHistogram of Words
![Page 22: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.](https://reader035.fdocuments.us/reader035/viewer/2022081523/5fdb9497c3726529cf17ebcc/html5/thumbnails/22.jpg)
YHL Container Class 22
![Page 23: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.](https://reader035.fdocuments.us/reader035/viewer/2022081523/5fdb9497c3726529cf17ebcc/html5/thumbnails/23.jpg)
YHL Container Class 23
![Page 24: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.](https://reader035.fdocuments.us/reader035/viewer/2022081523/5fdb9497c3726529cf17ebcc/html5/thumbnails/24.jpg)
YHL Container Class 24
![Page 25: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.](https://reader035.fdocuments.us/reader035/viewer/2022081523/5fdb9497c3726529cf17ebcc/html5/thumbnails/25.jpg)
YHL Container Class 25
![Page 26: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.](https://reader035.fdocuments.us/reader035/viewer/2022081523/5fdb9497c3726529cf17ebcc/html5/thumbnails/26.jpg)
YHL Container Class 26
![Page 27: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.](https://reader035.fdocuments.us/reader035/viewer/2022081523/5fdb9497c3726529cf17ebcc/html5/thumbnails/27.jpg)
YHL Container Class 27
![Page 28: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.](https://reader035.fdocuments.us/reader035/viewer/2022081523/5fdb9497c3726529cf17ebcc/html5/thumbnails/28.jpg)
YHL Container Class 28
C++ Container(Standard Template Library)
![Page 29: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.](https://reader035.fdocuments.us/reader035/viewer/2022081523/5fdb9497c3726529cf17ebcc/html5/thumbnails/29.jpg)
YHL Container Class 29
C++ Vector
![Page 30: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.](https://reader035.fdocuments.us/reader035/viewer/2022081523/5fdb9497c3726529cf17ebcc/html5/thumbnails/30.jpg)
YHL Container Class 30
![Page 31: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.](https://reader035.fdocuments.us/reader035/viewer/2022081523/5fdb9497c3726529cf17ebcc/html5/thumbnails/31.jpg)
YHL Container Class 31
![Page 32: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.](https://reader035.fdocuments.us/reader035/viewer/2022081523/5fdb9497c3726529cf17ebcc/html5/thumbnails/32.jpg)
YHL Container Class 32
C++ Vector
contiguous memory • efficient access (array-like [index])• efficient insert / delete at the end (allocate more memory
occasionally)• inefficient insert / delete at the front (allocate memory
for every insertion)• automatic expand / shrink allocated memory (allocate
more than necessary to reduce allocation / release / copy overhead)
• occasional copying of the whole vector
![Page 33: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.](https://reader035.fdocuments.us/reader035/viewer/2022081523/5fdb9497c3726529cf17ebcc/html5/thumbnails/33.jpg)
YHL Container Class 33
C++ Iterator
pointer to traverse a vector or other STL (standard template library) container
vector<int> v;cout << "\nvector size is: " << v.size() << endl;vector<int>::iterator p = v.begin();while ( p != v.end() ) {
cout << *p << " "; p++;
}
![Page 34: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.](https://reader035.fdocuments.us/reader035/viewer/2022081523/5fdb9497c3726529cf17ebcc/html5/thumbnails/34.jpg)
YHL Container Class 34
C++ List
![Page 35: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.](https://reader035.fdocuments.us/reader035/viewer/2022081523/5fdb9497c3726529cf17ebcc/html5/thumbnails/35.jpg)
YHL Container Class 35
![Page 36: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.](https://reader035.fdocuments.us/reader035/viewer/2022081523/5fdb9497c3726529cf17ebcc/html5/thumbnails/36.jpg)
YHL Container Class 36
![Page 37: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.](https://reader035.fdocuments.us/reader035/viewer/2022081523/5fdb9497c3726529cf17ebcc/html5/thumbnails/37.jpg)
YHL Container Class 37
![Page 38: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.](https://reader035.fdocuments.us/reader035/viewer/2022081523/5fdb9497c3726529cf17ebcc/html5/thumbnails/38.jpg)
YHL Container Class 38
![Page 39: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.](https://reader035.fdocuments.us/reader035/viewer/2022081523/5fdb9497c3726529cf17ebcc/html5/thumbnails/39.jpg)
YHL Container Class 39
C++ Vector of Objects
![Page 40: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.](https://reader035.fdocuments.us/reader035/viewer/2022081523/5fdb9497c3726529cf17ebcc/html5/thumbnails/40.jpg)
YHL Container Class 40
![Page 41: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.](https://reader035.fdocuments.us/reader035/viewer/2022081523/5fdb9497c3726529cf17ebcc/html5/thumbnails/41.jpg)
YHL Container Class 41
![Page 42: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.](https://reader035.fdocuments.us/reader035/viewer/2022081523/5fdb9497c3726529cf17ebcc/html5/thumbnails/42.jpg)
YHL Container Class 42
![Page 43: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.](https://reader035.fdocuments.us/reader035/viewer/2022081523/5fdb9497c3726529cf17ebcc/html5/thumbnails/43.jpg)
YHL Container Class 43
![Page 44: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.](https://reader035.fdocuments.us/reader035/viewer/2022081523/5fdb9497c3726529cf17ebcc/html5/thumbnails/44.jpg)
YHL Container Class 44
![Page 45: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.](https://reader035.fdocuments.us/reader035/viewer/2022081523/5fdb9497c3726529cf17ebcc/html5/thumbnails/45.jpg)
YHL Container Class 45
Self Test
![Page 46: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.](https://reader035.fdocuments.us/reader035/viewer/2022081523/5fdb9497c3726529cf17ebcc/html5/thumbnails/46.jpg)
YHL Collision Detection 1
ECE 462Object-Oriented Programming
using C++ and Java
Collision Detection
Yung-Hsiang [email protected]
![Page 47: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.](https://reader035.fdocuments.us/reader035/viewer/2022081523/5fdb9497c3726529cf17ebcc/html5/thumbnails/47.jpg)
YHL Collision Detection 2
Collision Detection
Almost every interactive game requires collision detection: a bullet hits a player, an airplane lands on a runway, a ball hits a brick, and a Tetrix piece hits a wall
![Page 48: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.](https://reader035.fdocuments.us/reader035/viewer/2022081523/5fdb9497c3726529cf17ebcc/html5/thumbnails/48.jpg)
YHL Collision Detection 3
Law of Reflection
• N: normal vector• I: incident vector• R: reflection vector• α : angle between N and I• β : angle between N and R
• Law of Reflection
N
IR αβ
α = β
![Page 49: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.](https://reader035.fdocuments.us/reader035/viewer/2022081523/5fdb9497c3726529cf17ebcc/html5/thumbnails/49.jpg)
YHL Collision Detection 4
Calculate R
• Suppose N, I, and R are unit vectors, i.e. |N| = |I| = |R| = 1
• R + (- I) = 2 (N ⋅ (- I)) N⇒ The sum of R and (-I) has the
same direction as N⇒ The length is twice the inner
product of N and (-I).
R = 2 (N ⋅ (- I)) N + I = - 2 (N ⋅ I) N + I
N
- IR αβ
![Page 50: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.](https://reader035.fdocuments.us/reader035/viewer/2022081523/5fdb9497c3726529cf17ebcc/html5/thumbnails/50.jpg)
YHL Collision Detection 5
Collision between two Circles
N = (x1, y1) - (x2, y2)C1 is moving.
(x1, y1)
(x2, y2)
I
R
![Page 51: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.](https://reader035.fdocuments.us/reader035/viewer/2022081523/5fdb9497c3726529cf17ebcc/html5/thumbnails/51.jpg)
YHL Collision Detection 6
Collision between Circle and Square
• approximate by using two squares• if the bounding square of the circle intersects with the
square ⇒ collision• if the intersection is tall ⇒ collide horizontally
(x1, y1)
(x2, y2)
I
RN
![Page 52: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.](https://reader035.fdocuments.us/reader035/viewer/2022081523/5fdb9497c3726529cf17ebcc/html5/thumbnails/52.jpg)
YHL Collision Detection 7
![Page 53: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.](https://reader035.fdocuments.us/reader035/viewer/2022081523/5fdb9497c3726529cf17ebcc/html5/thumbnails/53.jpg)
YHL Collision Detection 8
![Page 54: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.](https://reader035.fdocuments.us/reader035/viewer/2022081523/5fdb9497c3726529cf17ebcc/html5/thumbnails/54.jpg)
YHL Collision Detection 9
![Page 55: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.](https://reader035.fdocuments.us/reader035/viewer/2022081523/5fdb9497c3726529cf17ebcc/html5/thumbnails/55.jpg)
YHL Collision Detection 10
![Page 56: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.](https://reader035.fdocuments.us/reader035/viewer/2022081523/5fdb9497c3726529cf17ebcc/html5/thumbnails/56.jpg)
YHL Collision Detection 11
![Page 57: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.](https://reader035.fdocuments.us/reader035/viewer/2022081523/5fdb9497c3726529cf17ebcc/html5/thumbnails/57.jpg)
YHL Collision Detection 12
![Page 58: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.](https://reader035.fdocuments.us/reader035/viewer/2022081523/5fdb9497c3726529cf17ebcc/html5/thumbnails/58.jpg)
YHL Collision Detection 13
![Page 59: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.](https://reader035.fdocuments.us/reader035/viewer/2022081523/5fdb9497c3726529cf17ebcc/html5/thumbnails/59.jpg)
YHL Collision Detection 14
![Page 60: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.](https://reader035.fdocuments.us/reader035/viewer/2022081523/5fdb9497c3726529cf17ebcc/html5/thumbnails/60.jpg)
YHL Collision Detection 15
![Page 61: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.](https://reader035.fdocuments.us/reader035/viewer/2022081523/5fdb9497c3726529cf17ebcc/html5/thumbnails/61.jpg)
YHL Collision Detection 16
![Page 62: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.](https://reader035.fdocuments.us/reader035/viewer/2022081523/5fdb9497c3726529cf17ebcc/html5/thumbnails/62.jpg)
YHL Collision Detection 17
![Page 63: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.](https://reader035.fdocuments.us/reader035/viewer/2022081523/5fdb9497c3726529cf17ebcc/html5/thumbnails/63.jpg)
YHL Collision Detection 18
![Page 64: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.](https://reader035.fdocuments.us/reader035/viewer/2022081523/5fdb9497c3726529cf17ebcc/html5/thumbnails/64.jpg)
YHL Collision Detection 19
![Page 65: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.](https://reader035.fdocuments.us/reader035/viewer/2022081523/5fdb9497c3726529cf17ebcc/html5/thumbnails/65.jpg)
YHL Collision Detection 20
![Page 66: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.](https://reader035.fdocuments.us/reader035/viewer/2022081523/5fdb9497c3726529cf17ebcc/html5/thumbnails/66.jpg)
YHL Collision Detection 21
![Page 67: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.](https://reader035.fdocuments.us/reader035/viewer/2022081523/5fdb9497c3726529cf17ebcc/html5/thumbnails/67.jpg)
YHL Collision Detection 22
![Page 68: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.](https://reader035.fdocuments.us/reader035/viewer/2022081523/5fdb9497c3726529cf17ebcc/html5/thumbnails/68.jpg)
YHL Collision Detection 23
![Page 69: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.](https://reader035.fdocuments.us/reader035/viewer/2022081523/5fdb9497c3726529cf17ebcc/html5/thumbnails/69.jpg)
YHL Collision Detection 24
![Page 70: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.](https://reader035.fdocuments.us/reader035/viewer/2022081523/5fdb9497c3726529cf17ebcc/html5/thumbnails/70.jpg)
YHL Collision Detection 25
![Page 71: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.](https://reader035.fdocuments.us/reader035/viewer/2022081523/5fdb9497c3726529cf17ebcc/html5/thumbnails/71.jpg)
YHL Collision Detection 26
![Page 72: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.](https://reader035.fdocuments.us/reader035/viewer/2022081523/5fdb9497c3726529cf17ebcc/html5/thumbnails/72.jpg)
YHL Collision Detection 27
Known Problem 1
• When the ball moves towards the gap between two bricks, brick 1 may be eliminated first even though the ball would actually hit brick 2 first.
• This can happen because – brick 1 precedes brick 2 in the brick
list so brick 1 is checked first– the ball moves in discrete steps
(one pixel length each time).• Solution: ignore. This is not easily
noticeable when the ball moves fast.
1 2
![Page 73: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.](https://reader035.fdocuments.us/reader035/viewer/2022081523/5fdb9497c3726529cf17ebcc/html5/thumbnails/73.jpg)
YHL Collision Detection 28
Known Problem 2
• Once the ball moves horizontally (or vertically) and there is no circle brick along the ball's movement, the ball's direction will never change.
• Solution: detect whether |vx| or |vy| is too small (for example less than 0.1). If it is too small, make it larger (for example, 0.15).
![Page 74: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.](https://reader035.fdocuments.us/reader035/viewer/2022081523/5fdb9497c3726529cf17ebcc/html5/thumbnails/74.jpg)
YHL Collision Detection 29
Self Test
![Page 75: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.](https://reader035.fdocuments.us/reader035/viewer/2022081523/5fdb9497c3726529cf17ebcc/html5/thumbnails/75.jpg)
YHL New Container 1
ECE 462Object-Oriented Programming
using C++ and Java
Create New C++ Containers
Yung-Hsiang [email protected]
![Page 76: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.](https://reader035.fdocuments.us/reader035/viewer/2022081523/5fdb9497c3726529cf17ebcc/html5/thumbnails/76.jpg)
YHL New Container 2
Why to Create New Containers?
• need efficient ways to store and access objects• reuse the same implementation for different classes
![Page 77: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.](https://reader035.fdocuments.us/reader035/viewer/2022081523/5fdb9497c3726529cf17ebcc/html5/thumbnails/77.jpg)
YHL New Container 3
C++ Binary Search Tree
![Page 78: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.](https://reader035.fdocuments.us/reader035/viewer/2022081523/5fdb9497c3726529cf17ebcc/html5/thumbnails/78.jpg)
YHL New Container 4
Binary Search Tree
• A tree contains a group of nodes. • A node can have a left child and a right child. • If a node has no child, the node is a called a leaf node.• Each node has a unique value. • When a new value is inserted to the tree, if the value
already appears, the insertion has no effect.• If the value is smaller than a node, the value is inserted
as the left child of the node. If the node already has a left child, the value is inserted as a child of the child (recursively).
![Page 79: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.](https://reader035.fdocuments.us/reader035/viewer/2022081523/5fdb9497c3726529cf17ebcc/html5/thumbnails/79.jpg)
YHL New Container 5
• insert the first value, 17• insert 9• insert 23
• insert 4
1717
917
9 2317
9 23
4
![Page 80: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.](https://reader035.fdocuments.us/reader035/viewer/2022081523/5fdb9497c3726529cf17ebcc/html5/thumbnails/80.jpg)
YHL New Container 6
• insert 11
• insert 31
17
9 23
4 11
17
9 23
4 11 31
![Page 81: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.](https://reader035.fdocuments.us/reader035/viewer/2022081523/5fdb9497c3726529cf17ebcc/html5/thumbnails/81.jpg)
YHL New Container 7
Traverse Tree (In-Order)
if (left child is not empty){ visit left child; }print value;if (right child is not empty){ visit right child; }
⇒ The output values are sorted.4, 9, 11, 17, 23, 31
17
9 23
4 11 31
![Page 82: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.](https://reader035.fdocuments.us/reader035/viewer/2022081523/5fdb9497c3726529cf17ebcc/html5/thumbnails/82.jpg)
YHL New Container 8
![Page 83: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.](https://reader035.fdocuments.us/reader035/viewer/2022081523/5fdb9497c3726529cf17ebcc/html5/thumbnails/83.jpg)
YHL New Container 9
![Page 84: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.](https://reader035.fdocuments.us/reader035/viewer/2022081523/5fdb9497c3726529cf17ebcc/html5/thumbnails/84.jpg)
YHL New Container 10
![Page 85: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.](https://reader035.fdocuments.us/reader035/viewer/2022081523/5fdb9497c3726529cf17ebcc/html5/thumbnails/85.jpg)
YHL New Container 11
![Page 86: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.](https://reader035.fdocuments.us/reader035/viewer/2022081523/5fdb9497c3726529cf17ebcc/html5/thumbnails/86.jpg)
YHL New Container 12
![Page 87: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.](https://reader035.fdocuments.us/reader035/viewer/2022081523/5fdb9497c3726529cf17ebcc/html5/thumbnails/87.jpg)
YHL New Container 13
![Page 88: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.](https://reader035.fdocuments.us/reader035/viewer/2022081523/5fdb9497c3726529cf17ebcc/html5/thumbnails/88.jpg)
YHL New Container 14
![Page 89: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.](https://reader035.fdocuments.us/reader035/viewer/2022081523/5fdb9497c3726529cf17ebcc/html5/thumbnails/89.jpg)
YHL New Container 15
![Page 90: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.](https://reader035.fdocuments.us/reader035/viewer/2022081523/5fdb9497c3726529cf17ebcc/html5/thumbnails/90.jpg)
YHL New Container 16
![Page 91: ECE 462 Object-Oriented Programming using C++ and Java ...YHL Container Class 1 ECE 462 Object-Oriented Programming using C++ and Java Container Classes Yung-Hsiang Lu yunglu@purdue.edu.](https://reader035.fdocuments.us/reader035/viewer/2022081523/5fdb9497c3726529cf17ebcc/html5/thumbnails/91.jpg)
YHL New Container 17
Self Test