gpt4 book ai didi

java - 如何按顺序确定一条线上的点(从 P1 到 P2)?

转载 作者:行者123 更新时间:2023-12-02 00:53:01 25 4
gpt4 key购买 nike

嘿伙计们。我正在尝试为 Android 制作一款简单的游戏,其中玩家用一个拇指拖动一艘 spaceship ,并通过用另一个拇指点击空白区域向敌方飞船开火。问题是,为了让子弹在太空中行进动画,我需要用户的宇宙飞船和屏幕末端之间的点列表,即穿过用户点击位置的线。

我知道我必须参数化该行,并且已经阅读了一些有关该主题的内容,但我不太明白它,特别是如何将其转换为代码。在我看来,我需要将用户的船(P1)和用户点击的位置(P2)之间的线段转换为尽可能小的部分,我猜是x和y之间的变化率,斜率。一旦我知道了,我只需将变化率乘以距 P1 的距离即可得到所需的点。

但它不太有效。任何帮助,将不胜感激。谢谢。

编辑:这就是我正在做的事情。这都是为了计算变化率,我在 Beam 的更新方法中使用它,通过将其乘以速度来更新它的位置...

Beam(Renderer r, float OX, float OY, float TX, float TY)
{
super(r);

p.x = (int) OX;
p.y = (int) OY;

paint = new Paint();
paint.setColor(Color.BLUE);


float X = TX - OX;
float Y = TY - OY;

boolean xPositive = X >= 0;
boolean yPositive = Y >= 0;

if(X < Y)
{
RateOfChangeX = Math.abs(X) / Math.abs(Y);
RateOfChangeY = 1;
}
else
{
RateOfChangeX = 1;
RateOfChangeY = Math.abs(Y) / Math.abs(X);
}
if(RateOfChangeX < 0 & xPositive)
{
RateOfChangeX = RateOfChangeX * -1;
}
if(RateOfChangeY < 0 & yPositive)
{
RateOfChangeY = RateOfChangeY * -1;
}
}

最佳答案

这是如何对位于两点之间的点进行插值的示例。画线的代码非常不同,而且简单得多

此示例是用 C 编写的,但代码可能有用。 im 是图像,stride 是图像的步幅,sx 和 sy 是上/下或左/右移动的量。

float x=sx, y=sy;
for ( int i=1; i < int(totalLength); i++ ) {
int top = stride*int(y) + int(x),
bot = stride*int(y+1) + int(x);
float xr = x-int(x),
xl = 1-xr,
yt = y-int(y),
yb = 1-yt;
newLine[i]= im[top]*xr*yt +
im[top-1]*xl*yt +
im[bot]*xr*yb +
im[bot-1]*xl*yb;
x+=xgain;
y+=ygain;
}

获取 sx/sy (x1,y1) (x2,y2) 是您在之间绘制的点...代码是 python:

totalLength = math.sqrt(math.pow(x2-x1,2) + math.pow(y2-y1,2))

if x1 < x2:
sx,sy,ex,ey=(x1,y1,x2,y2)
else:
sx,sy,ex,ey=(x2,y2,x1,y1)

xgain = float(ex-sx)/totalLength
ygain = float(ey-sy)/totalLength

需要注意的一点是,你需要计算出每一步的x和y移动,然后如图所示进行插值。想一想,只需在一张纸上写一个网格,然后查看每个步骤的点应该在哪里。围绕该点绘制一个 1 像素 x 1 像素的框。

该算法通过从该点向后绘制一个 1px x 1px 的框,并在该框接触的四个网格点之间使用插值,稍微简化了一些。请注意,第一个像素被跳过,因为它是一种特殊情况。第一个像素代表一个问题,因为它可能位于图像之外,您需要在实际执行计算之前检查是否可以进行计算。

关于java - 如何按顺序确定一条线上的点(从 P1 到 P2)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2215675/

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