gpt4 book ai didi

java - 从给定角度计算目标像素

转载 作者:行者123 更新时间:2023-12-02 09:14:43 25 4
gpt4 key购买 nike

我想要什么:

enter image description here我正在使用方向传感器来获取方位角值(角度)。我也以用户为起点并画一个圆圈。现在我想在用户前进的点上绘制下一个像素,考虑到一步等于 30 像素。

当用户开始行走时,我想在屏幕上插入的平面图图像上绘制用户当前位置的圆圈。由于某些原因,我无法使用 GPS 来实现此解决方案。

以下是我正在执行的步骤:

  1. 从方向传感器获取当前用户方向(以角度为单位)。
  2. 用户将触摸屏幕以在图像上绘制起点。
  3. 当用户开始行走时,它将在图像上相对于用户的现实世界方向绘制点,如上图所示。给定起始点(pixelX,pixelY)和用户的起始角度以及他刚刚面对的当前角度,我如何才能实现这一目标。

到目前为止我们取得的成就:我们只需在当前像素上添加和减去像素,就可以在 0 、 90,180 和 270 四个角度上绘制直线。

newAzimuth 是当前用户方向的角度

           if (newAzimuth >= 45 && newAzimuth <= 135) {
startX = startX + oneStepPixelsWidth;
mScreenRotationTextView.setText("You turned (Right)");
} else if (newAzimuth > 135 && newAzimuth <= 225) {
mScreenRotationTextVniew.setText("You turned (Back)");
startY = startY + oneStepPixelsHeight;
} else if (newAzimuth > 225 && newAzimuth <= 315) {
mScreenRotationTextView.setText("You turned (Left)");
startX = startX - oneStepPixelsWidth;
} else if (newAzimuth > 315 || newAzimuth < 45) {
mScreenRotationTextView.setText("You turned (Front)");
startY = startY - oneStepPixelsHeight;
}

最佳答案

鉴于计算出的角度为:

enter image description here

这是其方程式。

X=distance*cos(angle)
Y=distance*sin(angle)

在您的情况下,距离始终为 30 像素

so (30Cos(Angle),30Sin(Angle)) 将为您提供您的位置。

要调整计算出的角度,您可以使用这些公式旋转它们;

adjustedX = x cos(angle) − y sin(angle)
adjustedY = y cos(angle) + x sin(angle)

例如,如果计算的角度是这样的:

enter image description here

那么你需要;

  1. 向右旋转 90 度或向左旋转 270 度。
  2. 翻译。
  3. 向右旋转 270 度或向左旋转 90 度。
 private Pair<Double, Double> getPositionOf(Pair<Double, Double> lastPosition, double angle, int distance, int angleAdjustment)
{
final Pair<Double, Double> rotatedLeftPosition = rotateLeft(lastPosition, 360 - angleAdjustment);
final Pair<Double, Double> translatedLocation = applyTranslationTo(rotatedLeftPosition, angle, distance);
return rotateLeft(translatedLocation, angleAdjustment);
}

private Pair<Double, Double> rotateLeft(Pair<Double, Double> position, double degreeAngle)
{
double x = position.first;
double y = position.second;

double adjustedX = (x * Math.cos(degreeAngle)) - (y * Math.sin(degreeAngle));
double adjustedY = (y * Math.cos(degreeAngle)) + (x * Math.sin(degreeAngle));
return new Pair<>(adjustedX, adjustedY);
}

@NotNull
private Pair<Double, Double> applyTranslationTo(final Pair<Double, Double> position, final double angle, final int distance)
{
double x = distance * Math.cos(angle);
double y = distance * Math.sin(angle);
return new Pair<>(position.first + x, position.second + y);
}

其中angleAdjustment将为90

关于java - 从给定角度计算目标像素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59088951/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com