Advertisement
Guest User

Untitled

a guest
Dec 19th, 2014
147
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.67 KB | None | 0 0
  1. package com.jiraiyah.jmath.vector
  2.  
  3. import javax.vecmath.Vector2d
  4.  
  5.  
  6. import com.jiraiyah.jmath.algebra.{Min, Max}
  7. import com.jiraiyah.jmath.algebra.scala.Numeric
  8. import org.lwjgl.util.vector.Vector2f
  9.  
  10. import scala.actors.A
  11.  
  12. abstract class Vector2[@specialized(Int,Long,Float,Double) A](){
  13. var _x : Numeric[A]
  14. var _y : Numeric[A]
  15. def apply(x: Numeric, y: Numeric): Vector2[A] = {
  16. _x = x[Numeric]
  17. _y = y[Numeric]
  18. this
  19. }
  20.  
  21. def this(v: Vector2) {
  22. this(v.getX, v.getY)
  23. }
  24.  
  25. def getX[A] = _x[Numeric]
  26.  
  27. def getY[A] = _y[Numeric]
  28.  
  29. def getFloatX[T](implicit ev:Numeric[T]) = _x[Float]
  30.  
  31. def getFloatY[T](implicit ev:Numeric[T]) = _y[Float]
  32.  
  33. def getDoubleX[T](implicit ev:Numeric[T]) = _x[Double]
  34.  
  35. def getDoubleY[T](implicit ev:Numeric[T]) = _y[Float]
  36.  
  37. def getIntX[T](implicit ev:Numeric[T]) = _x[Int]
  38.  
  39. def getIntY[T](implicit ev:Numeric[T]) = _y[Int]
  40.  
  41. def getBigIntX[T](implicit ev:Numeric[T]) = _x[BigInt]
  42.  
  43. def getBigIntY[T](implicit ev:Numeric[T]) = _y[BigInt]
  44.  
  45. def getBigDecX[T](implicit ev:Numeric[T]) = _x[BigDecimal]
  46.  
  47. def getBigDecY[T](implicit ev:Numeric[T]) = _y[BigDecimal]
  48.  
  49. def getGlFloat[T](implicit T:Vector2) = new Vector2f(getFloatX,getFloatY)
  50.  
  51. def getVecFloat[T](implicit T:Vector2) = new javax.vecmath.Vector2f(getFloatX,getFloatY)
  52.  
  53. def getVecDouble[T](implicit T:Vector2) = new Vector2d(getDoubleX,getDoubleY)
  54.  
  55. def getIntVector[T](implicit T:Vector2) = {
  56. new Vector2() {
  57. override var _x: Numeric = getIntX
  58. override var _y: Numeric = getIntY
  59. }
  60. }
  61.  
  62. def getFloatVector[T](implicit T:Vector2) = {
  63. new Vector2() {
  64. override var _x: Numeric = getFloatX
  65. override var _y: Numeric = getFloatY
  66. }
  67. }
  68.  
  69. def getDoubleVector[T](implicit T:Vector2) = {
  70. new Vector2() {
  71. override var _x: Numeric = getDoubleX
  72. override var _y: Numeric = getDoubleY
  73. }
  74. }
  75.  
  76. def getBigIntVector[T](implicit T:Vector2) = {
  77. new Vector2() {
  78. override var _x: Numeric = getBigIntX
  79. override var _y: Numeric = getBigIntY
  80. }
  81. }
  82.  
  83. def getBigDecVector[T](implicit T:Vector2) = {
  84. new Vector2() {
  85. override var _x: Numeric = getBigDecX
  86. override var _y: Numeric = getBigDecY
  87. }
  88. }
  89.  
  90. def setX[N:Numeric](x:N)(implicit T:Vector2) = {
  91. new Vector2() {
  92. override var _x: Numeric = x[Numeric]
  93. override var _y: Numeric = getY[Numeric]
  94. }
  95. }
  96.  
  97. def setY[N:Numeric](y:N)(implicit T:Vector2) = {
  98. new Vector2() {
  99. override var _x: Numeric = getX
  100. override var _y: Numeric = y[Numeric]
  101. }
  102. }
  103.  
  104. def set[N:Numeric](x:N, y:N)(implicit T:Vector2) = {
  105. new Vector2() {
  106. override var _x: Numeric = x[Numeric]
  107. override var _y: Numeric = y[Numeric]
  108. }
  109. }
  110.  
  111. def setToDouble[T]()(implicit T:Vector2) = {
  112. new Vector2() {
  113. override var _x: Numeric = getDoubleX
  114. override var _y: Numeric = getDoubleY
  115. }
  116. }
  117.  
  118. def setToFloat[T]()(implicit T:Vector2) = {
  119. new Vector2() {
  120. override var _x: Numeric = getFloatX
  121. override var _y: Numeric = getFloatY
  122. }
  123. }
  124.  
  125. def setToInteger[T]()(implicit T:Vector2) = {
  126. new Vector2() {
  127. override var _x: Numeric = getIntX
  128. override var _y: Numeric = getIntY
  129. }
  130. }
  131.  
  132. def setToBigInt[T]()(implicit T:Vector2) = {
  133. new Vector2() {
  134. override var _x: Numeric = getBigIntX
  135. override var _y: Numeric = getBigIntY
  136. }
  137. }
  138.  
  139. def setToBigDec[T]()(implicit T:Vector2) = {
  140. new Vector2() {
  141. override var _x: Numeric = getBigDecX
  142. override var _y: Numeric = getBigDecY
  143. }
  144. }
  145.  
  146. def max[V:Vector2](other: Vector2[V])(implicit V:Vector2) = {
  147. new Vector2() {
  148. override var _x: Numeric = Max.get(getX,other.getX)
  149. override var _y: Numeric = Max.get(getY,other.getY)
  150. }
  151. }
  152.  
  153. def min[T](other: Vector2)(implicit T:Vector2) = {
  154. new Vector2() {
  155. override var _x: Numeric = Min.get(getX,other.getX)
  156. override var _y: Numeric = Min.get(getY,other.getY)
  157. }
  158. }
  159.  
  160. def *[N:Numeric](a: N)(implicit ev:Numeric) = {
  161. new Vector2() {
  162. override var _x: Numeric = ev.times(getX, a[A])[A]
  163. override var _y: Numeric = ev.times(getY, a[A])[A]
  164. }
  165. }
  166.  
  167. def *[T](v: Vector2)(implicit ev:Numeric[A]) = {
  168. new Vector2() {
  169. override var _x: Numeric = ev.times(getX, v.getX)[A]
  170. override var _y: Numeric = ev.times(getY, v.getY)[A]
  171. }
  172. }
  173.  
  174. def /[N:Numeric](a: N)(implicit ev:Numeric) = {
  175. if (a == 0L)
  176. {
  177. if (_x.isInstanceOf[Double] || _y.isInstanceOf[Double])
  178. Vector2.ZeroDouble
  179. else if (_x.isInstanceOf[Float] || _y.isInstanceOf[Float])
  180. Vector2.ZeroFloat
  181. else if (_x.isInstanceOf[Int] || _y.isInstanceOf[Int])
  182. Vector2.ZeroInt
  183. else if (_x.isInstanceOf[BigInt] || _y.isInstanceOf[BigInt])
  184. Vector2.ZeroBigInt
  185. else
  186. Vector2.ZeroBigDec
  187. }
  188. new Vector2() {
  189. override var _x: Numeric = ev.div(getX, a[A])[A]
  190. override var _y: Numeric = ev.div(getY, a[A])[A]
  191. }
  192. }
  193.  
  194. def /(v: Vector2)(implicit ev:Numeric) = {
  195. if (v.getX == 0L || v.getY == 0L)
  196. {
  197. if (_x.isInstanceOf[Double] || _y.isInstanceOf[Double])
  198. Vector2.ZeroDouble
  199. else if (_x.isInstanceOf[Float] || _y.isInstanceOf[Float])
  200. Vector2.ZeroFloat
  201. else if (_x.isInstanceOf[Int] || _y.isInstanceOf[Int])
  202. Vector2.ZeroInt
  203. else if (_x.isInstanceOf[BigInt] || _y.isInstanceOf[BigInt])
  204. Vector2.ZeroBigInt
  205. else
  206. Vector2.ZeroBigDec
  207. }
  208. new Vector2() {
  209. override var _x: Numeric = ev.div(getX, v.getX)[A]
  210. override var _y: Numeric = ev.div(getY, v.getY)[A]
  211. }
  212. }
  213.  
  214. def +[N:Numeric](a: N)(implicit ev:Numeric) = {
  215. new Vector2() {
  216. override var _x: Numeric = ev.plus(getX, a[A])[A]
  217. override var _y: Numeric = ev.plus(getY, a[A])[A]
  218. }
  219. }
  220.  
  221. def +(v: Vector2)(implicit ev:Numeric) = {
  222. new Vector2() {
  223. override var _x: Numeric = ev.plus(getX, v.getX)[A]
  224. override var _y: Numeric = ev.plus(getY, v.getY)[A]
  225. }
  226. }
  227.  
  228. def -[N:Numeric](a: N)(implicit ev:Numeric) = {
  229. new Vector2() {
  230. override var _x: Numeric = ev.minus(getX, a[A])[A]
  231. override var _y: Numeric = ev.minus(getY, a[A])[A]
  232. }
  233. }
  234.  
  235. def -(v: Vector2)(implicit ev:Numeric) = {
  236. new Vector2() {
  237. override var _x: Numeric = ev.minus(getX, v.getX)[A]
  238. override var _y: Numeric = ev.minus(getY, v.getY)[A]
  239. }
  240. }
  241. }
  242.  
  243. object Vector2{
  244. def OneInt = new Vector2() {
  245. override var _x: Numeric = 1[Numeric]
  246. override var _y: Numeric = 1[Numeric]
  247. }
  248. def ZeroInt = new Vector2() {
  249. override var _x: Numeric = 0[Numeric]
  250. override var _y: Numeric = 0[Numeric]
  251. }
  252. def UnitXInt = new Vector2() {
  253. override var _x: Numeric = 1[Numeric]
  254. override var _y: Numeric = 0[Numeric]
  255. }
  256. def UnitYInt = new Vector2() {
  257. override var _x: Numeric = 0[Numeric]
  258. override var _y: Numeric = 1[Numeric]
  259. }
  260.  
  261. def OneBigInt = OneInt.getBigIntVector
  262. def ZeroBigInt = ZeroInt.getBigIntVector
  263. def UnitXBigInt = UnitXInt.getBigIntVector
  264. def UnitYBigInt = UnitYInt.getBigIntVector
  265.  
  266. def OneBigDec = OneInt.getBigDecVector
  267. def ZeroBigDec = ZeroInt.getBigDecVector
  268. def UnitXBigDec = UnitXInt.getBigDecVector
  269. def UnitYBigDec = UnitYInt.getBigDecVector
  270.  
  271. def OneFloat = OneInt.getFloatVector
  272. def ZeroFloat = ZeroInt.getFloatVector
  273. def UnitXFloat = UnitXInt.getFloatVector
  274. def UnitYFloat = UnitYInt.getFloatVector
  275.  
  276. def OneDouble = OneInt.getDoubleVector
  277. def ZeroDouble = ZeroInt.getDoubleVector
  278. def UnitXDouble = UnitXInt.getDoubleVector
  279. def UnitYDouble = UnitYInt.getDoubleVector
  280.  
  281. def test: Unit ={
  282. var a = ZeroInt
  283. a.setY(13f)
  284. a.setToFloat()
  285. var b = a.set(12,13).setToBigInt()
  286. a = a.setToInteger()
  287. a.max(OneDouble);
  288. a * 5f
  289. a * OneFloat
  290. a = a.setToInteger()
  291. a / 5
  292. a / OneFloat
  293. a + 0.4
  294. a - 0.45d
  295. a - ZeroDouble
  296. }
  297. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement