好吧,我正在尝试基于角度为0. x的原始位置旋转Java多边形,并且y最终在使用它们时最终转换为int,所以我可以理解没有看到一些变化,但是当角度差异大到0到180我觉得我应该看到一些东西.
我已经在这一段时间了,不能想到它是什么.这是方法.(对不起,如果它在代码标签中混乱,我的Firefox会搞砸它们.)
public void rotate(double x, double y, obj o1)
{
double dist = Math.sqrt(Math.pow(x - (o1.x + (o1.w/2)), 2) + Math.pow(y - (o1.y + (o1.h/2)),2));
x += (Math.sin(Math.toRadians(o1.a)) * dist);
y -= (Math.cos(Math.toRadians(o1.a)) * dist);
}
Run Code Online (Sandbox Code Playgroud) 我目前正在研究Java游戏,我想从所有游戏对象提供的水平和垂直速度计算方向和方向速度.我希望有一个类似下面的方法来计算物体朝向的方向/角度(基于它的水平和垂直速度);
public double getAngle() {
// Calculate angle/direction from the horizontal and vertical speed here
return angle;
}
Run Code Online (Sandbox Code Playgroud)
当然,我需要一种类似的方法来根据物体的水平和垂直速度计算物体的方向速度.
注意:当我问这个问题时,我没有学到任何关于几何/三角学的知识,因为我在第二或第三课.
给出以下内容:
- 起点(坐标)
- 角度(度)
- 速度
..我想计算给定的轨迹.
例如,对于下面的图像,速度为1:(10,10)(9,9)(8,8)(7,7)..
它应该能够向各个方向移动.
我怎么计算呢?

我正在努力弄清楚如何使它们之间的俯仰偏转和滚动独立.一旦我在z轴上旋转一些东西(俯仰),第二次旋转(yaxis yaw)取决于第一次和第三次旋转(x轴,滚动)的结果取决于另外两次.因此,我没有独立的音高,偏航,滚动,而是将它们三者混合在一起,很难看.
我希望有可能将对象角度存储在数组[俯仰,偏航,滚动]中,然后在变换过程中解码这些角度,以便偏航将对象放在给定位置,然后它取出与音高对应的角度,但是不是两者的复合......
我见过对"任意轴旋转矩阵"的引用.获得理想的结果会有用吗??? 1)应用偏航(gl.glRotatef(beta,0.0f,1.0f,0.0f);)2)得到手动旋转矢量的结果轴(1.0f,0.0f,0.0f)arround beta 3)应用音高使用轴进入2 {和滚动...如果1,2,3是正确的} 4)旋转轴2进入其x轴进行滚动5)使用轴进入4进行滚动
会有用吗?更好的解决方案?我想保持我的对象局部方向为[俯仰,偏航,滚动]格式.
我已经挣扎了几天,如果可能的话我想避免使用四元数.3D对象相对于0,0,0存储并沿着{1,0,0}并且转换到它们的目的地并且每帧都是角度,因此应该可以容易地避免万向节锁定问题.
换句话说,我的相机工作正常,世界坐标正确制作,但我不知道应该如何或在哪里应用基于偏航,髓,滚的物体局部变换.
应从数组[y,p,r]中读取结果,并且它们的组合不应重叠.
实际上我的转变是:
gl.glLoadIdentity();
float[] scalation = transform.getScalation();
gl.glScalef(scalation[0], scalation[1], scalation[2]);
float[] translation = transform.getTranslation();
gl.glTranslatef(translation[0], translation[1], translation[2]);
float[] rotation = transform.getRotation();
gl.glRotatef(rotation[0], 1.0f, 0.0f, 0.0f);
gl.glRotatef(rotation[1], 0.0f, 1.0f, 0.0f);
gl.glRotatef(rotation[2], 0.0f, 0.0f, 1.0f);
Run Code Online (Sandbox Code Playgroud) 如果我在圆上有两个点,是否可以找到圆的半径和圆心?

实际上我想在PIC中的位置放置圆圈.我只是有一个矩形,它将包含圆圈.我希望这些圆圈以圆形方式从矩形的左中心开始放置到右中心.如果需要更多解释,请告诉我...
“参考角”的定义:
一个角度?r在区间 [0, 2?) 对应的角度 ? 在这个区间之外,满足条件
sin(?) = sin(? r ) 和 cos(?) = cos(? r )。
例如(为简单起见,以度为单位考虑):
ref(390 o ) = 30 o
ref(360 o ) = 0 o
ref(-40 o ) = 320 o
ref(540 o ) = 180 o
查找参考角度的示例代码是:
double FindReferenceAngle(double Angle)
{
const double TWOPI = 2.0 * 3.1415926535897932384626433832795;
while(true)
{
if (Angle >= TWOPI)
{
Angle -= TWOPI;
}
else if (Angle < 0)
{
Angle += TWOPI;
}
else
{ …Run Code Online (Sandbox Code Playgroud) 我在尝试让子弹以我放入的角度发射时遇到了一些麻烦。我正在使用 eclipse 和 java。
我的代码:
x += (int) (spd * Math.cos(dir));
y -= (int) (spd * Math.sin(dir));`
Run Code Online (Sandbox Code Playgroud)
感觉它不起作用的原因是因为它被强制转换为 int ,这可能使它变得如此不准确。但是为了绘制矩形,它需要整数。
当输入 dir 为 0 时,它很好,并且向右射击。问题是当我输入 90 时,它不是直接向上射击而是向左射击一点。
关于如何解决这个问题的任何想法?谢谢!
我的应用程序有几个圆以任意角度旋转,我需要测试它们的旋转是否相等(相对于一些误差范围).一个天真的实现是这样的:
function angleEquals(first, second, errorMargin) {
return Math.abs(first - second) <= errorMargin;
}
Run Code Online (Sandbox Code Playgroud)
但由于旋转可能会增长到无穷大,因此失败了.因此,我们需要将两个角度标准化:
function normalizeAngle(angle) {
angle = angle % (2 * Math.PI); // normalize the angle to the interval [-2 * pi, 2 * pi]
if (angle < 0)
return 2 * Math.PI + angle; // normalize the angle to the interval [0, 2 * pi]
return angle;
}
Run Code Online (Sandbox Code Playgroud)
这几乎总是有效,但有一些失败的角落案例.例如
angleEquals(0, 2 * Math.PI - 1e-4, 1e-3)是false.
有什么建议?
我有两个对象,我需要确定它们是否会在将来的某个时间发生碰撞.假设两个物体是卡车,每个都在它们的独立车道上.第一辆卡车想改变车道,但卡车是否会碰撞?
两个物体都向前移动,但只有第一个物体有一个角度.物体以不同的,不同的速度移动,但只知道第二物体的速度.此外,这两个对象在不同的坐标系上运行(意味着每个对象都有一个新的原点),对象之间的距离也不同.
我没有第一个物体的矢量,但是我确实有一个相对于x轴的角度(不固定).
对于第二个对象,我有一个向量,它是直的.
请参考下图:

如何根据这些标准找到交叉点?我想这个角度是一条无限的线,它在某个点上会越过第二个物体的矢量幅度.我不认为这比计算两条线的交点更直接.
包起来:
我有两个角度阵列:a = [140 360 170 3]; b = [12 270 0 21]; 我需要找到在减去(/添加)数组元素时最小化的组合.我现在正在这样做:
c = [ones(1,4)*a(1)-b; ones(1,4)*a(2)-b; ones(1,4)*a(3)-b; ones(1,4)*a(4)-b];
cc= abs(c);
[minNumk, minIndkl] = min(cc(:));
[rowk, colk] = ind2sub(size(cc), minIndkl);
cc(rowk,:)=[];
cc(:,colk)=[];
[min2k,minInd2k]=min(cc(:));
[row2k, col2k] = ind2sub(size(cc), minInd2k);
cc(row2k,:)=[];
cc(:,col2k)=[];
[min3k,minInd3k]=min(cc(:));
[row3k, col3k] = ind2sub(size(cc), minInd3k);
cc(row3k,:)=[];
cc(:,col3k)=[];
min4k= cc;
total=minNumk+min2k+min3k+min4k
Run Code Online (Sandbox Code Playgroud)
题.有没有办法以更简洁的方式做到这一点?另外我在想我需要在这里使用mod(,360)吗?
编辑:如果元素被使用(减去),那么它就不能再使用了.(因此,删除整行和列.)
提前致谢!!!
任何建议将非常感谢!快乐10 000 000!:)
angle ×10
math ×4
geometry ×3
java ×3
c++ ×2
trigonometry ×2
algorithm ×1
android ×1
arrays ×1
direction ×1
intersection ×1
javascript ×1
jogl ×1
matlab ×1
min ×1
opengl ×1
point ×1
polygon ×1
projectile ×1
subtraction ×1
vector ×1