Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package com.olegchir.vectorperf
- import scala.collection.mutable.ArrayBuffer
- object Main {
- private class Vector2D (var x: Double, val y: Double) {
- def add(v : Vector2D) = {
- new Vector2D(v.x,v.y)
- }
- def mult(t:Transform2D):Vector2D = {
- new Vector2D(x * t.cos - y * t.sin + t.tx, y * t.sin + y * t.cos + t.ty)
- }
- override def toString = "Vector2D(" + "x=" + x + ", y=" + y + ')'
- }
- private class Transform2D (val angle: Double, val tx: Double, val ty: Double) {
- val cos: Double = Math.cos(angle)
- val sin: Double = Math.sin(angle)
- }
- private class VectorOfVector2D(private val size: Int) {
- private val buffer = new ArrayBuffer[Double](2 * size)
- def length() = size
- def get(idx: Int): Vector2D = new Vector2D(buffer.apply(idx * 2), buffer.apply(idx * 2 + 1))
- def add(v: Vector2D): Unit = {
- buffer+=v.x
- buffer+=v.y
- }
- def set(idx: Int, v: Vector2D): Unit = {
- buffer.update(2 * idx, v.x)
- buffer.update(2 * idx + 1, v.y)
- }
- }
- private def calc(v: VectorOfVector2D, t: Transform2D): Vector2D = {
- val res = new Vector2D(0, 0)
- for (i <- 0 until v.length()) {
- res.add(v.get(i).mult(t))
- }
- res
- }
- private def run(str: String, vects: VectorOfVector2D, transf: Transform2D): Unit = {
- println("Start of " + str)
- var vector: Vector2D = null
- val repeat = 1000
- val started = System.nanoTime()
- for (i <- 0 until repeat) {
- vector = calc(vects, transf)
- }
- val totalTime = (System.nanoTime() - started) * 1e-9
- println("Res = " + vector)
- println("Total time = " + totalTime + " (sec)")
- println("Average time = " + totalTime / repeat + " (sec)")
- println("End of " + str)
- }
- def main(a: Array[String]) = {
- val size = 1000000
- val vects = new VectorOfVector2D(size)
- for (i <- 0 until size) {
- val d = (1.0 * i) / size
- //vects.set(i, new Vector2D(d, d))
- vects.add(new Vector2D(d, d))
- }
- val transf = new Transform2D(1.0, -2.5, 5.0);
- run("Warm Up", vects, transf)
- println
- run("Actual", vects, transf)
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement