我不擅长数学或几何,但我想以越来越大的角度绘制一些线段.我想要绘制的东西就像你举起手并将手指分开一样:从公共点开始的线条以及它们之间具有相同差异的角度展开.
我试过这个:
len = 300;
angle = 10;
for (i = 0; i <= 5; ++i) {
endPointX = 50 + len * Math.cos(angle);
endPointY = 50 + len * Math.tan(angle);
draw.Line(50, 50, endPointX, endPointY);
angle += 10;
}
Run Code Online (Sandbox Code Playgroud)
然而,这是完全错误的,并产生这样的东西
http://i.stack.imgur.com/taX40.png
但是我想要这样的东西(糟糕的mspaint,对不起):
http://i.stack.imgur.com/8xfpp.png
什么是正确的数学?
目前在我的科学计算代码中,我有以下内容:
//Include M_PI constant
#define _USE_MATH_DEFINES
//Needed for square root function.
#include <math.h>
Run Code Online (Sandbox Code Playgroud)
这工作......至少在Linux上...我没有在所有平台上为C编译器测试它.但是,在调查一些较旧的Fortran代码时,我最近遇到了这种看似聪明的方法,即在另一个代码中定义pi(不是我自己的代码):
<angle in deg.>*8.0d0 * datan(1.0d0) / 360.0d0
Run Code Online (Sandbox Code Playgroud)
当然这在C中完全可行,对吧?所以我可以定义我的转换函数:
inline double DegToRad(const double A)
{
return A * atan(1.0) / 45.0;
}
Run Code Online (Sandbox Code Playgroud)
哪种方法更便携?是否有任何数字(例如舍入)考虑因素值得使用一种方法而不是另一种方法?
我确实认为M_PI常量使代码更具可读性.当然,我可以愉快地使用上述方法分配我自己的PI常量.
什么被认为是针对多个平台(Windows,Linux等)的C/C++代码的最佳实践?
Atan2(y,x)将在-pi和pi之间返回一个浮点数.我想计算两个角度之间的距离,但非连续性让我失望.
我希望能够计算角度1和角度2之间的距离.
这一点的重点是能够从中心到指定角度创建一个圆锥体.基本上我将评估:
if(DistanceFromAngle1 < pi/4 [45°])
{
Angle2 is part of cone
}
Run Code Online (Sandbox Code Playgroud) 这可能以前已经回答过,如果有的话,对不起.我基本上需要从原点到点获得角度.那么让我们说Origin是(0,0)而我的目标点是(3,0).
3点= 90度
6点钟= 180度
9点= 270度
12点钟= 0度
不知何故,我要做一些数学魔法,并发现角度为90度(Top为0). 原点可能会有所不同,所以我需要一个带有两个参数的方法,Origin和TargetPoint,它们以度为单位返回双倍角度.
是的,我意识到这看起来简短而且没有建设性,但我让这个问题尽可能简单易懂.所有其他问题都被关闭了 - .-
谢谢
我想在一个角度上移动一个点(Vector2).我有自己的观点.但我不擅长数学或libgdx.获得角度我用这个:
degrees = (float) ((Math.atan2(touchPoint.x - x,
-(touchPoint.y - y)) * 180.0d / Math.PI) + 240.0f);
Run Code Online (Sandbox Code Playgroud)
现在,我想移动矢量.但我真的不知道我必须做什么......我看了一些问题,但只有一些关于改变角度而不是转移的事情.我认为在libgdx中必须有一个函数.请帮忙.
更新:
public class Games implements ApplicationListener {
SpriteBatch spriteBatch;
Texture texture;
float x = 160;
float y = 5;
Vector2 touch;
Vector2 movement;
Vector2 position;
Vector2 dir;
Vector2 velocity;
float speed;
float deltaTime;
@Override
public void create() {
spriteBatch = new SpriteBatch();
texture = new Texture(Gdx.files.internal("images/1.png"));
touch = new Vector2();
movement = new Vector2();
position = new Vector2();
dir = new Vector2();
velocity …Run Code Online (Sandbox Code Playgroud) 因为这是一个复杂的问题,通常会导致很多混乱(我之前已经问过这个问题的变体,但从来没有以正确的方式提出这个问题,也没有得到答案),我将尽量把它说清楚可能的。
事实:
我正在尝试做的事情:
我正在尝试在人形骨骼结构上播放动画,并使用扭矩(旋转力)将物理布娃娃推入与骨骼结构大致相同的姿势。
问题:
我可以在四元数中完全工作,直到需要将扭矩应用于刚体。该AddTorque 函数在欧拉角中有效工作,这意味着我不能使用四元数。我可以轻松地从四元数中提取欧拉角,但它们不可靠并且会导致布娃娃严重变形。
我需要的:
我需要从 Forward、Up 和 Right 向量计算可靠的 3D Euler 角(例如,那些不会从 + 翻转到 - “随机”)。我意识到这有点复杂,但这就是我在这里问的原因:我缺乏自己解决这个问题的知识和经验。
鉴于矢量本身是可靠的,我认为没有理由不能从它们计算出可靠的欧拉角。另外,我不知道我想要或需要欧拉角的旋转顺序,但我相信以后修改会很容易。
任何帮助将非常感激!
我正在尝试绘制一个物体的标题.我有四个点向量 - 让我们称之为
mdex mdey(又名x1,y1),thpx thpy(又名x2,y2).我y在x(dy和dx)中找到了变化和变化,然后将其输入到atan2d函数中.然后我浏览结果并将它们绘制到图表上.
图表上的比例从-180到180.当线路经过-180或180度时,我的问题就出现了.然后它"弹出"到图表的另一侧(即,181实际上是-179).
这是有问题的,因为当它确实没有时,它看起来像角度发生了巨大的变化 - 它只是'翻身'.另外,这会搞砸我的角速度计算,这是根据点之间的变化来计算的.最初,我只是尝试通过向低于0的所有值添加180来将图形转换为0-360比例.这不起作用.
这是图表,因此您可以更好地理解问题(图表是在我尝试0-360转换后).

我的问题
我想知道是否有一个不同的功能,我可以用来计算角度,这将给我一个不断增加的值,一种修改数据以便绘制得很好的方法,或者一种修改图形的方法,使它看起来很直观?
提前致谢!
我正在使用以下几行旋转 SCNNode:
let rotate = SCNAction.rotateByAngle(CGFloat(M_PI), aroundAxis:SCNVector3Make(0, 1, 0), duration: NSTimeInterval(10.0))
let repeat = SCNAction.repeatActionForever(rotate)
node.runAction(repeat)
Run Code Online (Sandbox Code Playgroud)
我在渲染方法中打印节点的 eulerAngles.y:
let rad = Double(node.eulerAngles.y)
var angleInDegrees = fmodf(360.0 + -Float(rad) * (180.0 / Float(M_PI)), 360.0)
println("eulerAngles.y rad:\(rad) degree:\(angleInDegrees)")
Run Code Online (Sandbox Code Playgroud)
但我在旋转过程中得到奇怪的值,如下所示:
...
eulerAngles.y rad:-1.38788688182831 degree:79.5201
eulerAngles.y rad:-1.40567290782928 degree:80.5391
eulerAngles.y rad:-1.4227991104126 degree:81.5204
eulerAngles.y rad:-1.44030773639679 degree:82.5236
eulerAngles.y rad:-1.45790004730225 degree:83.5315
eulerAngles.y rad:-1.47438871860504 degree:84.4763
eulerAngles.y rad:-1.49130213260651 degree:85.4453
eulerAngles.y rad:1.57079637050629 degree:270.0
eulerAngles.y rad:1.57079637050629 degree:270.0
eulerAngles.y rad:1.57079637050629 degree:270.0
eulerAngles.y rad:1.57079637050629 degree:270.0
eulerAngles.y rad:1.57079637050629 degree:270.0
eulerAngles.y rad:1.57079637050629 degree:270.0
eulerAngles.y rad:1.57079637050629 degree:270.0 …Run Code Online (Sandbox Code Playgroud) 我有这个简单的函数来设置矢量的角度.它有效地获取向量的当前幅度(长度),计算角度并将角度从弧度转换为度.然后我将角度应用于X和Y,最后将矢量乘以它的原始幅度.
this.setAngle = function(degree){
var l = this.length(); //magnitude of vector
var angle = degree*Math.PI/180; //degress converted to radians
this.x=Math.cos(angle);
this.y=Math.sin(angle);
this.multiply(l); //original magnitude
return;
}
Run Code Online (Sandbox Code Playgroud)
但是我不确定如何从Vector获得(获得)角度.以下是我的尝试:
this.getAngle = function(){
var angle = Math.atan(this.y/this.x); //radians
var degrees = angle/(180*Math.PI); //degrees
return Math.floor(degrees); //round number, avoid decimal fragments
}
Run Code Online (Sandbox Code Playgroud)
此尝试不会返回除0或-1之外的任何值.
有什么建议?
编辑:
正确的方法:
this.getAngle = function(){
var angle = Math.atan2(this.y, this.x);
var degrees = 180*angle/Math.PI;
return (360+Math.round(degrees))%360;
}
Run Code Online (Sandbox Code Playgroud) 我需要计算一条线和水平线之间的角度.我的高中数学似乎让我失望了.
import matplotlib.pyplot as plt
import numpy as np
x = [8450.0, 8061.0, 7524.0, 7180.0, 8247.0, 8929.0, 8896.0, 9736.0, 9658.0, 9592.0]
y = range(len(x))
best_fit_line = np.poly1d(np.polyfit(y, x, 1))(y)
slope = (y[-1] - y[0]) / (x[-1] - x[0])
angle = np.arctan(slope)
print 'slope: ' + str(slope)
print 'angle: ' + str(angle)
plt.figure(figsize=(8,6))
plt.plot(x)
plt.plot(best_fit_line, '--', color='r')
plt.show()
Run Code Online (Sandbox Code Playgroud)
结果如下:
slope: 0.00788091068301
angle: 0.00788074753125
Run Code Online (Sandbox Code Playgroud)
我需要水平和红色虚线之间的角度.只要看一下它就应该在30-45度之间.我究竟做错了什么?
*有关slope = (y[-1] - y[0]) / (x[-1] - x[0]),我也尝试过numpy.diff和scipy.stats.linregress,但没有成功,无论是.
angle ×10
math ×3
atan2 ×2
c# ×2
vector ×2
c ×1
c++ ×1
constants ×1
direction ×1
directx ×1
distance ×1
drawing ×1
euler-angles ×1
geometry ×1
graph ×1
java ×1
javascript ×1
libgdx ×1
lines ×1
matlab ×1
numpy ×1
plot ×1
portability ×1
python ×1
quaternions ×1
rotation ×1
scenekit ×1
swift ×1
time-series ×1
transfer ×1
xna ×1