Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • SEARCH
  • Home
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 8961205
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: June 15, 20262026-06-15T15:50:02+00:00 2026-06-15T15:50:02+00:00

I have a server and a client. I have 40 opengl cubes. There state

  • 0

I have a server and a client.
I have 40 opengl cubes. There state is described by 3d vector for position and 3×3 rotation matrix(or a quaternion).

How can I send intermediate packets and predict the object state on the client between those packets(extrapolation)?

for object position I can use a linear predictor on velocity.
How to predict quaternion states?

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-06-15T15:50:04+00:00Added an answer on June 15, 2026 at 3:50 pm

    The easiest thing, parallel to what you’re doing with linear velocity, is to use a linear predictor on angular velocity.

    If you have two quaternions, q_0 and q_t, representing global orientations that are t seconds apart, you can compute the finite difference between the two quaternions and use that to find an angular velocity that can be used for extrapolation.

    1. Make sure that the inner-product between q_0 and q_t is non-negative. If it’s negative, negate all the components of one of the quaternions. This makes sure that we’re not trying to go the long way around. If your bodies are rotating really fast relative to your sampling, this is a problem and you’ll need a more complicated model that accounts for the previous angular velocity and makes assumptions about maximum possible acceleration. We’ll assume that’s not the case.
    2. Then we compute the relative difference quaternion. dq = q_t * q_0′ (where q_0′ is the quaternion rotational inverse/conjugate). If you have the luxury of having fixed-sized steps, you can stop here and predict then next orientation t seconds into the future: q_2t = dq*d_t.
    3. If we can’ step forward by integer multiples of t, we compute the angle of rotation from dq. Quaternions and angular velocities are both variations on “axis-angle” representations of changes in orientation. If you rotate by Θ around unit-length axis [x,y,z], then the quaternion representation of that is q = [cos(Θ/2), sin(Θ/2)x, sin(Θ/2)y, sin(Θ/2)z] (using the quaternion convention where the w component comes first). If you rotate by Θ/t around axis [x,y,z], then the angular velocity is v = [Θx,Θy,Θz]/t. So v = Θ[q.x,q.y,q.z]/(t||[q.x,q.y,q.z]||). We can compute the angle two ways: Θ = 2acos(q.w) = 2asin(||[q.x,q.y,q.z]||). These will always be the same because of step 1. Numerics make it nicer to use sine since we need to find m = ||[q.x,q.y,q.z]|| anyway for the next step.
    4. If m is large enough, then we just find the angular velocity:

      v = 2asin(m)[dq.x,dq.y,dq.z]/(m*t)

      However, if m‘s not large enough, we’ll face numeric issues trying to divide by near-zero. So programmers will use the Taylor expansion of the sinc() function around zero, which happens to be very accurate in this case. Remember that m = sin(Θ/2). With m<1e-4, we can accurately compute asin(m)/m = 6/(6-m*m). Then you just need to multiply the result by 2*[dq.x,dq.y,dq.z]/t and you have your angular velocity. Phew.

    5. Extrapolating is then a matter of multiplying your angular velocity times the time that has passed. Then you go backwards, converting the angular change to a quaternion and multiplying it onto q_t.

    It seems like there must be an easier way…

    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

Exposition: I'm familiar with C/C++/Scheme & OpenGL. I have this client/server program written in
I have a server-client application in which I can modify both codebases. The client
I have a client-server Silverlight application, which is use Socets. I have server appliaction
We have a Server/Client cybercafe management application which used to work fine on Windows
I have a server-client application [TCP sockets, .NET 4.0].. the application about : do
Currently, I'm working on a project where I have a server - client relationship
I have client/server applications and a very simple protocol for communication. More precisely, it's
We have client server based app which saves user related data into a zip
I have Client-Server environment and developed a project for Client-Server. I need to share
i have client-server app, I'm managing connections with Threads and handlers inside app, but

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.