Brandon Johnson wrote:Hello!
I'm in the middle of developing SWING panel based flight attitude indicator, and I'm having trouble with the yaw.
So basically, I need a line to change it's orientation based on the yaw. The yaw will go between -60 (turning far left) and +60 (turning far right) with 0 being level.
How would I draw a line to change the line based on the yaw?
Henry Wong wrote:
Brandon Johnson wrote:Hello!
I'm in the middle of developing SWING panel based flight attitude indicator, and I'm having trouble with the yaw.
So basically, I need a line to change it's orientation based on the yaw. The yaw will go between -60 (turning far left) and +60 (turning far right) with 0 being level.
How would I draw a line to change the line based on the yaw?
First, it has been many many years since I sat in a cockpit, so much stuff may have changed since then... Anyway, I thought the attitude indicator was good for pitch and bank only. For yaw, I remember using mainly the turn and slip indicator -- that's assuming that I even cared much about yaw ...![]()
Henry
Henry Wong wrote:that's assuming that I even cared much about yaw ...
Paul Clapham wrote:Hi Brandon, welcome to the Ranch!
I think the short answer is, you're going to have to use some trigonometry.
But that probably isn't too helpful. We need more details to give a better answer. I'm guessing you want something like a dial displaying a yaw value and you want a needle in that dial. With 0 you'd have the needle pointing straight up, and with -60 you'd have it pointing horizontally to the left, and so on. Is that right?
And would it be fair to assume that your code is just getting a yaw number as input from some other part of the code? Or is part of your problem getting that number in the first place?
Paul Clapham wrote:So you want the red line to always be the same length, and to just rotate about its centre point?
If that's the case, then it's like this. When the line is horizontal, then it extends from (-1, 0) to (1, 0) if you put the origin of the coordinate system at the centre of the red line and scale the size appropriately. Then to draw a line of the same length which is rotated by an angle A, the line extends from (-cos A, -sin A) to (cos A, sin A).
Bear in mind that the methods in the Math class (like Math.sin) require a number of radians as their argument, not degrees. (The Math class has methods to convert between degrees and radians.) You'll also have to convert your coordinate system where 60 is a quarter of a circle into degrees, where 90 is a quarter of a circle.
The math is picky in that it's easy to get signs wrong and things like that.
Brandon Johnson wrote:
As you can see on the bank left photo, it's at a weird angle, and the red line is much longer than it should be. I want it to scale, stay the same length, and turn completely vertical to show a vertical bank. The bank variable at -60 is full bank left (vertical, wings straight up), 0 is level flight, then +60 is full bank rhgt vertical wings straight up.
Henry Wong wrote:
Brandon Johnson wrote:
As you can see on the bank left photo, it's at a weird angle, and the red line is much longer than it should be. I want it to scale, stay the same length, and turn completely vertical to show a vertical bank. The bank variable at -60 is full bank left (vertical, wings straight up), 0 is level flight, then +60 is full bank rhgt vertical wings straight up.
Actually, this is not correct. A left turn, with the plane's wings vertical relative to the ground, is a 90 degree turn -- not a 60 degree turn. Also, very few planes can do that -- as the wings are no longer holding the plane up anymore.
Henry
Brandon Johnson wrote:
Well I know that being technical, but not in the scale I'm using.
Also, this aircraft doesn't have wings, I was just explaining.
I'm OK with staying on the proper scale of 90 degrees, but I'll have to rework some stuff.
Henry Wong wrote:
Brandon Johnson wrote:
Well I know that being technical, but not in the scale I'm using.
Also, this aircraft doesn't have wings, I was just explaining :).
I'm OK with staying on the proper scale of 90 degrees, but I'll have to rework some stuff.
One more nitpick... :) ... With attitude indicators, the "plane" component doesn't move. It is always level and center on the indicator. In fact, many older indicators, the plane is drawn on the glass panel itself. Anyway, it is the background that moves -- meaning when the actual plane turns left, on the indicator, it is the horizon (sky/ground color stuff) that rotates clockwise. Remember that the pilot should be inside the plane, and the indicator is designed to show the attitude from his/her point of reference.
Henry
Paul Clapham wrote:Well, let's start by simplifying your code a bit. It can be reduced to this:
So, you want your line to be 100 units long and you want it to be centred at (360, 160). And you want it to rotate based on the value of the "bank" variable. So the value you're looking for is (360, 160) + 50 * (cos(bank in radians), sin(bank in radians)) for one of the ends.
Tony Docherty wrote:Another potential issue is if your full bank left and your full bank right are both represented as a vertical line, when you are looking at a vertical line you only know you are in a full bank but you don't know which way you are banking. You could draw the left half of the line in red and the right half in green to represent the port and starboard wings so when the line is vertical you can see which wing is pointing up and which is pointing down and hence which way you are banking.
Brandon Johnson wrote:
Tony Docherty wrote:Another potential issue is if your full bank left and your full bank right are both represented as a vertical line, when you are looking at a vertical line you only know you are in a full bank but you don't know which way you are banking. You could draw the left half of the line in red and the right half in green to represent the port and starboard wings so when the line is vertical you can see which wing is pointing up and which is pointing down and hence which way you are banking.
I've put in place audible warnings to prevent this, thanks though!
Brandon Johnson wrote:Instead of adding the line rotation, I decided to use Graphics2D AffineTransform's and rotate the background as well as the degree indicators, while having the plane line remain static. Thanks guys! Now to find a better looking way to draw the degrees/make them move fluidly.
Henry Wong wrote:
Brandon Johnson wrote:
Tony Docherty wrote:Another potential issue is if your full bank left and your full bank right are both represented as a vertical line, when you are looking at a vertical line you only know you are in a full bank but you don't know which way you are banking. You could draw the left half of the line in red and the right half in green to represent the port and starboard wings so when the line is vertical you can see which wing is pointing up and which is pointing down and hence which way you are banking.
I've put in place audible warnings to prevent this, thanks though!
Brandon Johnson wrote:Instead of adding the line rotation, I decided to use Graphics2D AffineTransform's and rotate the background as well as the degree indicators, while having the plane line remain static. Thanks guys! Now to find a better looking way to draw the degrees/make them move fluidly.
BTW, your new change also solves the previous issue. A full right bank has the ground on the right, while a full left bank has the sky on the right. It is now easy to tell the two apart. Heck, if you like, you can even do a barrel roll and the indicator can be correct throughout the whole maneuver (meaning that there is a representation for everything in the maneuver).
Good job...![]()
Henry
Brandon Johnson wrote:
I'm trying to think of an efficient way to have the lines move as the pitch moves, instead of staying static and just having the numbers change. Any thoughts?
Henry Wong wrote:
Brandon Johnson wrote:
I'm trying to think of an efficient way to have the lines move as the pitch moves, instead of staying static and just having the numbers change. Any thoughts?
Well, it is more than just lines, you need to move the horizon too -- meaning you should see more sky in a climb, and more ground in a dive.
Unfortunately, I don't know of an efficient way to do this in one pass, but with two passes, I guess you can shift the background up or down to account for pitch, and then rotate it to account for bank.
Henry
Brandon Johnson wrote:
The background already moves as it's supposed to. I'm just trying to figure out the lines themselves.
Henry Wong wrote:
Brandon Johnson wrote:
The background already moves as it's supposed to. I'm just trying to figure out the lines themselves.
Aren't the lines in a fixed position relative to the background? Meaning is drawing the lines onto the background buffer, and then shift and rotate the background (with the lines) an option?
Henry
Brandon Johnson wrote:
Henry Wong wrote:
Brandon Johnson wrote:
The background already moves as it's supposed to. I'm just trying to figure out the lines themselves.
Aren't the lines in a fixed position relative to the background? Meaning is drawing the lines onto the background buffer, and then shift and rotate the background (with the lines) an option?
Henry
Yes Henry.
Here, I'll upload a video of how it currently operates. It will be easier to explain.