diff --git a/HW3/1_2_2.png b/HW3/1_2_2.png new file mode 100644 index 0000000..a24c11a Binary files /dev/null and b/HW3/1_2_2.png differ diff --git a/HW3/HW3.html b/HW3/HW3.html new file mode 100644 index 0000000..ae9e888 --- /dev/null +++ b/HW3/HW3.html @@ -0,0 +1,906 @@ + + + + + HW3 + + + + + + + + + + +

HW3

+

Problem 1

+ +

Problem 2

+
#include <stdio.h> +#define true 1 +#define false 0 + +typedef int tPointi[2]; + +int Area2(tPointi a, tPointi b, tPointi c) { + return (b[0] - a[0]) * (c[1] - a[1]) - + (c[0] - a[0]) * (b[1] - a[1]); +} + +int Collinear(tPointi a, tPointi b, tPointi c) { + return Area2(a, b, c) == 0; +} + +int Between(tPointi a, tPointi b, tPointi c) { + if (!Collinear(a, b, c)) + return false; + + if (a[0] != b[0]) + return ((a[0] < c[0] && b[0] > c[0]) || + (a[0] > c[0] && b[0] < c[0])); + else + return ((a[1] < c[1] && b[1] > c[1]) || + (a[1] > c[1] && b[1] < c[1])); +} + +int TIntersect(tPointi a, tPointi b, tPointi c, tPointi d) { + if (Between(a, b, c) && !Collinear(a, b, d)) + return true; + + if (Between(a, b, d) && !Collinear(a, b, c)) + return true; + + if (Between(c, d, a) && !Collinear(c, d, b)) + return true; + + if (Between(c, d, b) && !Collinear(c, d, a)) + return true; + + return false; +} + +int main() { + tPointi a = {0, 0}; + tPointi b = {0, 2}; + tPointi c = {0, 1}; + tPointi d = {1, 1}; + printf("TIntersect is %s", TIntersect(a, b, c, d)?"true":"false"); +} + +
+ + + + + \ No newline at end of file diff --git a/HW3/HW3.md b/HW3/HW3.md new file mode 100644 index 0000000..2c8db9a --- /dev/null +++ b/HW3/HW3.md @@ -0,0 +1,74 @@ +# HW3 +## Problem 1 + - 1. + | Deque | Left test | Left test | + | ----------------- | ------------- | ------------- | + | <2,1,0,2> | | | + | <3,2,1,0,3> | Left(2,1,3)T | Left(0,2,3)F | + | <3,2,1,0,3> | Left(3,2,4)T | Left(0,3,4)T | + | <5,3,2,1,0,5> | Left(3,2,5)T | Left(0,3,5)F | + | <6,3,2,1,0,5,6> | Left(5,3,6)F | Left(0,5,6)T | + | <6,3,2,1,0,5,6> | Left(6,3,7)T | Left(5,6,7)T | + | <6,3,2,1,0,5,6> | Left(6,3,8)T | Left(5,6,8)T | + | <9,2,1,0,5,6,9> | Left(6,3,9)F | Left(5,6,9)T | + | <10,1,0,5,6,9,10> | Left(9,2,10)F | Left(6,9,10)T | + + the first and the last one of each deque are the bottom and the top. + - 2. + - 1. Impossible, Edge $v_4v_5$ would be forced to cross the path $v_0v_1v_2$. + - 2. Possible, ![1_2_2](1_2_2.png) + - 3. Impossible, <2, 1, 0, 2> means 0 is on the left of $v_2v_1$. However, <4, 1, 2, 4> contains only right of $v_2v_1$, which does not include 0. +## Problem 2 +``` C +#include +#define true 1 +#define false 0 + +typedef int tPointi[2]; + +int Area2(tPointi a, tPointi b, tPointi c) { + return (b[0] - a[0]) * (c[1] - a[1]) - + (c[0] - a[0]) * (b[1] - a[1]); +} + +int Collinear(tPointi a, tPointi b, tPointi c) { + return Area2(a, b, c) == 0; +} + +int Between(tPointi a, tPointi b, tPointi c) { + if (!Collinear(a, b, c)) + return false; + + if (a[0] != b[0]) + return ((a[0] < c[0] && b[0] > c[0]) || + (a[0] > c[0] && b[0] < c[0])); + else + return ((a[1] < c[1] && b[1] > c[1]) || + (a[1] > c[1] && b[1] < c[1])); +} + +int TIntersect(tPointi a, tPointi b, tPointi c, tPointi d) { + if (Between(a, b, c) && !Collinear(a, b, d)) + return true; + + if (Between(a, b, d) && !Collinear(a, b, c)) + return true; + + if (Between(c, d, a) && !Collinear(c, d, b)) + return true; + + if (Between(c, d, b) && !Collinear(c, d, a)) + return true; + + return false; +} + +int main() { + tPointi a = {0, 0}; + tPointi b = {0, 2}; + tPointi c = {0, 1}; + tPointi d = {1, 1}; + printf("TIntersect is %s", TIntersect(a, b, c, d)?"true":"false"); +} + +``` \ No newline at end of file diff --git a/HW3/HW3.pdf b/HW3/HW3.pdf new file mode 100644 index 0000000..98b81cc Binary files /dev/null and b/HW3/HW3.pdf differ