Giter VIP home page Giter VIP logo

Comments (3)

ItsNickBarry avatar ItsNickBarry commented on July 21, 2024

I'm not sure about the coordinate system you're using. Again, I'm not sure how a coordinate system would work at all on the hyperbolic plane. I haven't looked into it enough yet.

I did notice one clear problem, however. When the player travels "straight" across the plane, it follows a Euclidean straight line. On the hyperbolic plane, straight lines appear as arcs of circles, each such circle intersects is orthogonal to the unit circle.

I will look into the coordinate system when I have an opportunity, but for now I suggest avoiding the use of vectors. Instead, give the player object a location Point, a speed, and an angle of facing. Then simply update the player's location using Point.distantPoint:
player.location = player.location.distantPoint(player.speed, player.angle)
The point returned by Point.distantPoint will now contain a third attribute in addition to x and y: direction. This is the direction the player would be facing after having traveled between point and the distantPoint. If Point.distantPoint is called without specifying an angle, the point is checked for this direction attribute, and that is used if present.

from hyperbolic-canvas.

ItsNickBarry avatar ItsNickBarry commented on July 21, 2024

So, to wrap, you might use this:

var currentDistance = player.location.distanceFromCenter();
if (currentDistance > maxDistance) {
  var newPoint = Point.givenHyperbolicPolarCoordinates(2 * maxDistance - currentDistance, player.location.angle() + Math.PI);
  newPoint.direction = player.location.direction;
  player.location = newPoint;
}

from hyperbolic-canvas.

ItsNickBarry avatar ItsNickBarry commented on July 21, 2024

I realize this is a bit awkward, with the direction attribute on the returned Point object, but it's the only efficient way. I'll work on making it more user-friendly.

from hyperbolic-canvas.

Related Issues (12)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.