-
Notifications
You must be signed in to change notification settings - Fork 0
/
CS1101S M5.js
87 lines (68 loc) · 2.67 KB
/
CS1101S M5.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
import {draw_connected_full_view, connect_ends, unit_circle, make_point, draw_connected, x_of, y_of, draw_connected_full_view_proportional} from "curve";
// Q1
function s_generator(pt) {
const xcord = x_of(pt);
const ycord = y_of(pt) + 1;
const ycord2 = ycord - 2;
return t => t <= 1/2
? make_point(math_cos(2 * math_PI * (2 * t * 3/4))+ xcord,
math_sin(2 * math_PI * (2 * t * 3/4))+ ycord)
: make_point(math_cos(2 * math_PI * (2 * t * 3/4))+ xcord,
math_sin(2 * math_PI * (-2 * t * 3/4)) + ycord2);
}
const my_s = s_generator(make_point(0,0));
function reflect_through_y_axis(curve) {
return t => make_point(-x_of(curve(t)),
y_of(curve(t))
);
}
(draw_connected_full_view_proportional(200))(reflect_through_y_axis(my_s));
// Q2
//const my_s_curve = s_generator(make_point(0,0));
const my_s_curve = s_generator(make_point(0,0));
function reverse(curve) {
return t => make_point(-x_of(curve(t)),
-y_of(curve(t))
);
}
/*
function straightline(curve) {
const startxcord = x_of(curve(make_point(0,0))
(0)
);
const startycord = y_of(curve(make_point(0,0))
(0)
);
const endxcord = x_of(curve(make_point(0,0))
(1)
);
const endycord = y_of(curve(make_point(0,0))
(1)
);
return t => make_point((startxcord-endxcord) *t,
(startycord-endycord) *t
);
}
*/
function close(curve) {
return connect_ends(curve,
reverse(curve)
);
}
/*
function vertical_line(makepoint, length) {
const xcord = x_of(makepoint);
const ycord = y_of(makepoint);
return t => make_point(xcord, ycord+(length*t));
}
very interesting, it does not matter where i put the vertical line, it will always
start at the end of the 1st curve, even if i put another coordinate as the starting
point for the next curve.
its like it resets and actually draws another curve using another point as its centre
it calculates the 2nd centre by using the ending point of the 1st curve, taking that point as
its starting and than work backwords to get the centre. after that i completes the 2nd curve
with the new centre as the point.
amazing
*/
draw_connected_full_view_proportional(200)
(connect_ends(close(my_s_curve), reflect_through_y_axis(my_s_curve)));