-
Notifications
You must be signed in to change notification settings - Fork 13
/
parabola.go
144 lines (126 loc) · 3.51 KB
/
parabola.go
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
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
package gogeom
//y^2 = 4*a*x
type Parabola struct {
A float64
IsYAxis bool
}
//(y - k)^2 = 4*a*(x - h)
type ParabolaWithOrigin struct {
A float64
H float64
K float64
IsYAxis bool
}
//Length of latus ration
func (p *Parabola) LenghtOfLatusRation() float64 {
return (p.A * 4)
}
//Length of latus ration for shifted origin
func (p *ParabolaWithOrigin) LenghtOfLatusRation() float64 {
return (p.A * 4)
}
// find the focus of a parabola
func (p *Parabola) FocusOfParabola() (float64, float64) {
if p.IsYAxis == false {
return p.A, 0
} else {
return 0, p.A
}
}
// focus of shifted origin parabola
func (p *ParabolaWithOrigin) FocusOfParabola() (float64, float64) {
if p.IsYAxis == false {
return (p.H + p.A), p.K
} else {
return (p.H), (p.K + p.A)
}
}
//Equation of directix
func (p *Parabola) DirectrixEquation() string {
if p.IsYAxis == true {
return ("y = " + FloatToString(-(p.A)))
} else {
return ("x = " + FloatToString(-(p.A)))
}
}
//axis of normal parabola
func (p *Parabola) AxisEquation() string {
if p.IsYAxis == true {
return ("x = 0")
} else {
return ("y = 0")
}
}
//axis of normal ParabolaWithOrigin
func (p *ParabolaWithOrigin) AxisEquation() string {
if p.IsYAxis == true {
return ("x = " + FloatToString(p.H-p.A))
} else {
return ("y = " + FloatToString(p.K-p.A))
}
}
//Equation of directix ParabolaWithOrigin
func (p *ParabolaWithOrigin) DirectrixEquation() string {
if p.IsYAxis == true {
return ("y = " + FloatToString(p.K-(p.A)))
} else {
return ("x = " + FloatToString(p.H-(p.A)))
}
}
//Equation of Vertex ParabolaWithOrigin
func (p *ParabolaWithOrigin) Vertex() (float64, float64) {
return p.H, p.K
}
//Equation of Position Of Point
func (p *Parabola) PositionOfPoint(x, y float64) string {
output := ""
if PowerFunction(y, 2) == (4 * p.A * x) {
output = "Point lies on Parabola"
} else if PowerFunction(y, 2) > (4 * p.A * x) {
output = "Point lies outside of Parabola"
} else if PowerFunction(y, 2) < (4 * p.A * x) {
output = "Point lies inside of Parabola"
}
return output
}
//Line y =mx+c is intersecting with the parabola
func (p *Parabola) PointOfInteresction(m, c float64) string {
output := ""
denominator := p.A / m
if c == denominator {
output = "meet the parabola at coincident points"
} else if c < denominator {
output = "intersect to parabola at two points"
} else if c > denominator {
output = "doesn't cut the parabola or touch it"
}
return output
}
//Equation of Tangent Equation of parabola
func (p *Parabola) TangentEquation(x, y float64) string {
output := ""
if p.IsYAxis == true {
output = FloatToString(x) + "x = " + FloatToString(2*p.A) + " (x +" + FloatToString(x) + ")"
} else {
output = FloatToString(y) + "y = " + FloatToString(2*p.A) + " (y +" + FloatToString(y) + ")"
}
return output
}
//Equation of Normal Equation of parabola
func (p *Parabola) NormalEquation(x, y float64) string {
LHS := FloatToString(y) + "y"
RHS := FloatToString(-(y / 2 * p.A)) + " ( x - " + FloatToString(x) + " ) "
return LHS + " = " + RHS
}
//Equation of Chord Of Contact Equation
func (p *Parabola) ChordOfContactEquation(x, y float64) string {
return FloatToString(x) + "x = " + FloatToString(2) + " (x +" + FloatToString(x) + ")"
}
//Equation of Polar Of Point Equation
func (p *Parabola) PolarOfPoint(x, y float64) string {
return FloatToString(x) + "x = " + FloatToString(2) + " (x +" + FloatToString(x) + ")"
}
// Point of Pole in Line
func (p *Parabola) PoleOfline(l, m float64) (float64, float64) {
return m / l, (-2 * p.A * m) / l
}