@@ -9,6 +9,12 @@ public protocol Trigonometry {
99 static func sin( _ a: Vector < Self > ) -> Vector < Self >
1010 static func cos( _ a: Vector < Self > ) -> Vector < Self >
1111 static func tan( _ a: Vector < Self > ) -> Vector < Self >
12+ static func asin( _ a: Vector < Self > ) -> Vector < Self >
13+ static func acos( _ a: Vector < Self > ) -> Vector < Self >
14+ static func atan( _ a: Vector < Self > ) -> Vector < Self >
15+ static func csc( _ a: Vector < Self > ) -> Vector < Self >
16+ static func sec( _ a: Vector < Self > ) -> Vector < Self >
17+ static func cot( _ a: Vector < Self > ) -> Vector < Self >
1218}
1319
1420@_documentation ( visibility: private)
@@ -31,6 +37,45 @@ extension Float: Trigonometry {
3137 vForce. tan ( a. buffer, result: & result. buffer)
3238 return result
3339 }
40+
41+ public static func asin( _ a: Vector < Float > ) -> Vector < Float > {
42+ var result = Vector ( like: a)
43+ vForce. asin ( a. buffer, result: & result. buffer)
44+ return result
45+ }
46+
47+ public static func acos( _ a: Vector < Float > ) -> Vector < Float > {
48+ var result = Vector ( like: a)
49+ vForce. acos ( a. buffer, result: & result. buffer)
50+ return result
51+ }
52+
53+ public static func atan( _ a: Vector < Float > ) -> Vector < Float > {
54+ var result = Vector ( like: a)
55+ vForce. atan ( a. buffer, result: & result. buffer)
56+ return result
57+ }
58+
59+ public static func csc( _ a: Vector < Float > ) -> Vector < Float > {
60+ var result = Vector ( like: a)
61+ vForce. sin ( a. buffer, result: & result. buffer)
62+ vForce. reciprocal ( result. buffer, result: & result. buffer)
63+ return result
64+ }
65+
66+ public static func sec( _ a: Vector < Float > ) -> Vector < Float > {
67+ var result = Vector ( like: a)
68+ vForce. cos ( a. buffer, result: & result. buffer)
69+ vForce. reciprocal ( result. buffer, result: & result. buffer)
70+ return result
71+ }
72+
73+ public static func cot( _ a: Vector < Float > ) -> Vector < Float > {
74+ var result = Vector ( like: a)
75+ vForce. tan ( a. buffer, result: & result. buffer)
76+ vForce. reciprocal ( result. buffer, result: & result. buffer)
77+ return result
78+ }
3479}
3580
3681@_documentation ( visibility: private)
@@ -53,6 +98,45 @@ extension Double: Trigonometry {
5398 vForce. tan ( a. buffer, result: & result. buffer)
5499 return result
55100 }
101+
102+ public static func asin( _ a: Vector < Double > ) -> Vector < Double > {
103+ var result = Vector ( like: a)
104+ vForce. asin ( a. buffer, result: & result. buffer)
105+ return result
106+ }
107+
108+ public static func acos( _ a: Vector < Double > ) -> Vector < Double > {
109+ var result = Vector ( like: a)
110+ vForce. acos ( a. buffer, result: & result. buffer)
111+ return result
112+ }
113+
114+ public static func atan( _ a: Vector < Double > ) -> Vector < Double > {
115+ var result = Vector ( like: a)
116+ vForce. atan ( a. buffer, result: & result. buffer)
117+ return result
118+ }
119+
120+ public static func csc( _ a: Vector < Double > ) -> Vector < Double > {
121+ var result = Vector ( like: a)
122+ vForce. sin ( a. buffer, result: & result. buffer)
123+ vForce. reciprocal ( result. buffer, result: & result. buffer)
124+ return result
125+ }
126+
127+ public static func sec( _ a: Vector < Double > ) -> Vector < Double > {
128+ var result = Vector ( like: a)
129+ vForce. cos ( a. buffer, result: & result. buffer)
130+ vForce. reciprocal ( result. buffer, result: & result. buffer)
131+ return result
132+ }
133+
134+ public static func cot( _ a: Vector < Double > ) -> Vector < Double > {
135+ var result = Vector ( like: a)
136+ vForce. tan ( a. buffer, result: & result. buffer)
137+ vForce. reciprocal ( result. buffer, result: & result. buffer)
138+ return result
139+ }
56140}
57141
58142/// Calculate the sine of each element in a vector.
@@ -87,3 +171,51 @@ public func cos<Scalar>(_ vec: Vector<Scalar>) -> Vector<Scalar> where Scalar: T
87171public func tan< Scalar> ( _ vec: Vector < Scalar > ) -> Vector < Scalar > where Scalar: Trigonometry {
88172 Scalar . tan ( vec)
89173}
174+
175+ /// Calculate the arcsine of each element in a vector.
176+ ///
177+ /// Elements in the vector should be within the domain -1 ≤ x ≤ 1 otherwise results may be nan. Results are returned on the closed interval -π / 2 ≤ y ≤ π / 2.
178+ /// ```swift
179+ /// let vec = Vector([-1, -0.5, 0, 0.5, 1])
180+ /// let result = asin(vec)
181+ /// ```
182+ /// - Parameter vec: The input vector with values from -1 to 1.
183+ /// - Returns: A vector representing the arcsine of the input vector.
184+ public func asin< Scalar> ( _ vec: Vector < Scalar > ) -> Vector < Scalar > where Scalar: Trigonometry {
185+ Scalar . asin ( vec)
186+ }
187+
188+ /// Calculate the arccosine of each element in a vector.
189+ /// - Parameter vec: The input vector.
190+ /// - Returns: A vector representing the arccosine of the input vector.
191+ public func acos< Scalar> ( _ vec: Vector < Scalar > ) -> Vector < Scalar > where Scalar: Trigonometry {
192+ Scalar . acos ( vec)
193+ }
194+
195+ /// Calculate the arctangent of each element in a vector.
196+ /// - Parameter vec: The input vector.
197+ /// - Returns: A vector representing the arctangent of the input vector.
198+ public func atan< Scalar> ( _ vec: Vector < Scalar > ) -> Vector < Scalar > where Scalar: Trigonometry {
199+ Scalar . atan ( vec)
200+ }
201+
202+ /// Calculate the cosecant as 1 / sinθ for each element in a vector.
203+ /// - Parameter vec: The input vector.
204+ /// - Returns: A vector representing the cosecant of the input vector.
205+ public func csc< Scalar> ( _ vec: Vector < Scalar > ) -> Vector < Scalar > where Scalar: Trigonometry {
206+ Scalar . csc ( vec)
207+ }
208+
209+ /// Calculate the secant as 1 / cosθ for each element in a vector.
210+ /// - Parameter vec: The input vector.
211+ /// - Returns: A vector representing the secant of the input vector.
212+ public func sec< Scalar> ( _ vec: Vector < Scalar > ) -> Vector < Scalar > where Scalar: Trigonometry {
213+ Scalar . sec ( vec)
214+ }
215+
216+ /// Calculate the cotangent as 1 / tanθ for each element in a vector.
217+ /// - Parameter vec: The input vector.
218+ /// - Returns: A vector representing the cotangent of the input vector.
219+ public func cot< Scalar> ( _ vec: Vector < Scalar > ) -> Vector < Scalar > where Scalar: Trigonometry {
220+ Scalar . cot ( vec)
221+ }
0 commit comments