I actually wrote something like this a long time ago. It's buried somewhere.
Simply it gave preset position, future position, and allowed you to move the future position within constraints (i.e. your M-Drive) by adjusting the future position, as this is how it's done in the board games.
I didn't use it in anger, and it needed some scaling features. But it was pretty straight forward and worked ok.
The basic kernel of mine was written some 20 years ago in QBasic. The vector algorithm worked OK, AFAIK, and I even added the Z axis although it only displays the x,y plane. Kinda pointless to worry about 3D when interstellar maps aren't worrying about it...
Cartesian coordinates are in kms. The display scaled to encompass all units in play but had little to orient the player other than galactic directions (coreward, rimward, etc.) Now, with some advances in my skills, I've been able to add an azimuth wheel and a dynamically rescaling reference grid. The grid shrinks as distances increase, until the display has room for a 10 power grid scale change (10,000kms to 100,000kms, hundred to million, etc.).
The problem with it back then was that after a couple turns of movement the numbers got so large that I was getting fatal overflow errors. I shelved the project. Now that QB64 has come on the scene, there are a host of things that I can do with it, including mouse support. I never learned the low level language stuff that such things used to require. QB64's _INTEGER64 data type allows me to track x,y,z positions to immense interstellar distances if I care to now. With the demise of the overflow errors I've picked up the gauntlet again.
I rouse myself only rarely to code, and it shows, but when I do I shake it like a pitbull to exhaustion. This time I'm going to take it as far as this bear of very little brain can go.