Мне нужна (простая) неизменяемая 2D векторная библиотека для Java или Scala - PullRequest
2 голосов
/ 18 января 2011

Я искал целый день.Я пробовал библиотеку Simplex3D Scala.Но он плохо документирован, и мне даже не удается нормализовать вектор после загрузки старого выпуска, потому что текущий не запускается.

javax.vecmath не является неизменяемым, поэтому его нежелательно использовать в Scala.

commons-math больше ориентирован на научную математику без удобства использования 2D (или 3D).

Ответы [ 4 ]

2 голосов
/ 24 января 2011

Simplex3d Math очень внимательно следит за GLSL, поэтому подойдет и любое руководство по GLSL.

Вы можете нормализовать вектор 'v' следующим образом: normalize (v)

Simplex3d Math - это библиотека, в которой нет запускаемых классов, поэтому я не уверен, что вы подразумеваете под «новая версия не запускается». Пожалуйста, присоединитесь к списку рассылки и предоставьте более подробную информацию, я буду более чем рад помочь вам: http://groups.google.com/group/simplex3d-dev

Документация будет улучшена для следующего выпуска.

2 голосов
/ 18 января 2011

Я только что провел еще несколько исследований. Slick2D, кажется, содержит класс Vector2f с неизменяемыми методами. Хотя это не так уж много и может быть сделано вручную, может быть, через час.

2 голосов
/ 18 января 2011

Вот тот, который я сделал для некоторых простых игровых вещей.

Вряд ли он идеален и не совсем неизменен.Я хотел неизменяемые версии операторов для некоторых частей кода.Первоначально он также включал класс Vector2 JBox2D, в котором отсутствовали перегрузки операторов и куча других вещей.

package Ostkaka

import scala.math

/**
 * Date: 2010-okt-06
 */
class Vector2(private var _x: Float, private var _y: Float) {
  def x = _x
  def y = _y

  def +(v: Vector2) = {var c = Vector2(x, y); c += v; c}

  def +=(v: Vector2) = {
    this._x += v.x
    this._y += v.y
    ()
  }

  def -(v: Vector2) = {var c = Vector2(x, y); c -= v; v}

  def -=(v: Vector2) = {
    this._x -= v.x
    this._y -= v.y
    ()
  }

  def /(factor: Float) = {var c = Vector2(x, y); c /= factor; c}

  def /=(factor: Float) = {
    this *= (1 / factor);
    ()
  }

  def *(factor: Float) = {var c = Vector2(x, y); c *= factor; c}

  def *=(factor: Float) = {
    this._x *= factor
    this._y *= factor
    ()
  }

  def unary_- : Vector2 = Vector2(-x, -y)

  def magnitude = (math.sqrt (x * x + y * y).toDouble).toFloat

  def normalised = this / magnitude

  def dot(v: Vector2) = x * v.x + y * v.y

  def project(v: Vector2) = {
    val axis = v.normalised
    axis * (this dot axis)
  }
}

object Vector2
{

  def zero = new Vector2(0, 0)

  def unitX = new Vector2(1, 0)

  def unitY = new Vector2(0, 1)

  implicit def Tuple2FloatToVector2(v: (Float, Float)): Vector2 = {
    new Vector2(v._1, v._2)
  }

  def apply(): Vector2 = {
    new Vector2(0, 0)
  }

  def apply(x: Float, y: Float): Vector2 = {
    new Vector2(x, y)
  }

}
2 голосов
/ 18 января 2011

Я не мог найти один, когда мне был нужен. Так что я построил один, и я всегда собирался выпустить его. Сейчас я слишком занят, чтобы что-то с этим сделать, но я мог бы сделать это доступным на следующей неделе, если лучшего ответа не будет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...