public static LineModel CalculateLineFromPointAndDirection(PointModel point, double direction) { double yAxisAngle; int quadrant; if (direction < 90) { yAxisAngle = direction; quadrant = 1; } else if (direction < 180) { yAxisAngle = 180 - direction; quadrant = 2; } else if (direction < 270) { yAxisAngle = direction - 180; quadrant = 3; } else { yAxisAngle = 360 - direction; quadrant = 4; } var sin = MathOperation.Sin(yAxisAngle); var cos = MathOperation.Cos(yAxisAngle); var toNextPointLength = 100; //var nextPointX = sin * toNextPointLength + point.x; //var nextPointY = cos * toNextPointLength + point.y; double nextPointX, nextPointY; if (quadrant == 1 || quadrant == 2) { nextPointX = sin * toNextPointLength + point.x; } else { nextPointX = point.x - sin * toNextPointLength; } if (quadrant == 1 || quadrant == 4) { nextPointY = cos * toNextPointLength + point.y; } else { nextPointY = point.y - cos * toNextPointLength; } var nextPoint = new PointModel(nextPointX, nextPointY); var line = CalculateLineFromTwoPoint(point, nextPoint); return(line); }
public static void CalculateTargetObservationPos(TextBox targetDirectionText, TextBox subDirectionText, TextBox observationHeightText, TextBox targetHeightText, ref TextBox distanceText, ref TextBox observationDateText, ref TextBox targetPositionText, bool updateObservationDate = true) { if (updateObservationDate) { observationDateText.Text = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); } if (string.IsNullOrEmpty(targetHeightText.Text) || string.IsNullOrEmpty(observationHeightText.Text)) { return; } double targetHeight, observationHeight = 0; try { targetHeight = Convert.ToDouble(targetHeightText.Text); observationHeight = Convert.ToDouble(observationHeightText.Text); } catch { MessageBox.Show("invalid number: " + targetHeightText.Text + ", " + observationHeightText.Height); return; } var distance = Math.Round(targetHeight / observationHeight * 400.00, 2); distanceText.Text = distance.ToString(); if (string.IsNullOrEmpty(targetDirectionText.Text) || string.IsNullOrEmpty(subDirectionText.Text)) { return; } double targetDirection = 0, subDirection = 0; try { targetDirection = Convert.ToDouble(targetDirectionText.Text); subDirection = Convert.ToDouble(subDirectionText.Text); } catch { MessageBox.Show("invalid number: " + targetDirectionText.Text + ", " + subDirectionText.Text); } var actualDirection = DirectionOperation.CalculateSubActualDirection(subDirection, targetDirection); double xAxisAngle; int quadrantIndex; if (actualDirection < 90) { xAxisAngle = 90 - actualDirection; quadrantIndex = 1; } else if (actualDirection < 180) { xAxisAngle = actualDirection - 90; quadrantIndex = 2; } else if (actualDirection < 270) { xAxisAngle = 270 - actualDirection; quadrantIndex = 3; } else { xAxisAngle = actualDirection - 270; quadrantIndex = 4; } var cos = MathOperation.Cos(xAxisAngle); var sin = MathOperation.Sin(xAxisAngle); var x = cos * distance; var y = sin * distance; if (quadrantIndex == 2) { y = -1 * y; } if (quadrantIndex == 3) { y = -1 * y; x = -1 * x; } if (quadrantIndex == 4) { x = -1 * x; } var point = new PointModel(x, y); targetPositionText.Text = point.ToString(); }