标签: angle

以增加的角度绘制线条

我不擅长数学或几何,但我想以越来越大的角度绘制一些线段.我想要绘制的东西就像你举起手并将手指分开一样:从公共点开始的线条以及它们之间具有相同差异的角度展开.

我试过这个:

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

什么是正确的数学?

drawing lines angle

4
推荐指数
1
解决办法
2778
查看次数

在C/C++中定义PI的更好/更便携的方法?

目前在我的科学计算代码中,我有以下内容:

//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++代码的最佳实践?

c math portability constants angle

4
推荐指数
1
解决办法
1505
查看次数

试图计算两个角度之间的差异(atan2)

Atan2(y,x)将在-pi和pi之间返回一个浮点数.我想计算两个角度之间的距离,但非连续性让我失望.

为了更好地理解,请参阅此

我希望能够计算角度1和角度2之间的距离.

这一点的重点是能够从中心到指定角度创建一个圆锥体.基本上我将评估:

if(DistanceFromAngle1 < pi/4 [45°])
{
  Angle2 is part of cone
}
Run Code Online (Sandbox Code Playgroud)

c# geometry distance angle atan2

4
推荐指数
2
解决办法
5467
查看次数

获得点和原点之间的角度

这可能以前已经回答过,如果有的话,对不起.我基本上需要从原点到点获得角度.那么让我们说Origin是(0,0)而我的目标点是(3,0).

3点= 90度

6点钟= 180度

9点= 270度

12点钟= 0度


不知何故,我要做一些数学魔法,并发现角度为90度(Top为0). 原点可能会有所不同,所以我需要一个带有两个参数的方法,Origin和TargetPoint,它们以度为单位返回双倍角度.

是的,我意识到这看起来简短而且没有建设性,但我让这个问题尽可能简单易懂.所有其他问题都被关闭了 - .-

谢谢

c# directx xna angle

4
推荐指数
1
解决办法
2万
查看次数

在角度+ Libgdx上移动一个点(矢量)

我想在一个角度上移动一个点(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)

java math angle transfer libgdx

4
推荐指数
1
解决办法
9968
查看次数

如何从前向、向上和向右向量计算欧拉角?

因为这是一个复杂的问题,通常会导致很多混乱(我之前已经问过这个问题的变体,但从来没有以正确的方式提出这个问题,也没有得到答案),我将尽量把它说清楚可能的。

事实:

  • 我正在使用 Unity。
  • 我可以从任何四元数旋转中轻松获得前向、向上和向右向量。
  • 我不能简单地记录我自己的欧拉角,修改它们并通过新的四元数应用旋转,因为对象是由物理控制的。
  • 除非用代码(或伪代码)编写,否则我根本不了解数学,所以这对我最有益。
  • C++ 风格的答案对我来说最容易理解,但我几乎可以计算出任何类型的代码。
  • 我不想让任何人为我编写代码!我只是在代码或伪代码中寻求答案,因为我从未学会阅读普通的数学曲线;我是程序员,不是数学家。
  • Unity 使用左手坐标系。X = 向右,Y = 向上,Z = 向前。

我正在尝试做的事情:

我正在尝试在人形骨骼结构上播放动画,并使用扭矩(旋转力)将物理布娃娃推入与骨骼结构大致相同的姿势。

问题:

我可以在四元数中完全工作,直到需要将扭矩应用于刚体。该AddTorque 函数在欧拉角中有效工作,这意味着我不能使用四元数。我可以轻松地从四元数中提取欧拉角,但它们不可靠并且会导致布娃娃严重变形。

我需要的:

我需要从 Forward、Up 和 Right 向量计算可靠的 3D Euler 角(例如,那些不会从 + 翻转到 - “随机”)。我意识到这有点复杂,但这就是我在这里问的原因:我缺乏自己解决这个问题的知识和经验。

鉴于矢量本身是可靠的,我认为没有理由不能从它们计算出可靠的欧拉角。另外,我不知道我想要或需要欧拉角的旋转顺序,但我相信以后修改会很容易。

任何帮助将非常感激!

c++ vector angle quaternions euler-angles

4
推荐指数
1
解决办法
6992
查看次数

绘制直观的角度图

我正在尝试绘制一个物体的标题.我有四个点向量 - 让我们称之为

  • mdex
  • mdey(又名x1,y1),
  • thpx
  • thpy(又名x2,y2).

yx(dydx)中找到了变化和变化,然后将其输入到atan2d函数中.然后我浏览结果并将它们绘制到图表上.

图表上的比例从-180到180.当线路经过-180或180度时,我的问题就出现了.然后它"弹出"到图表的另一侧(即,181实际上是-179).

这是有问题的,因为当它确实没有时,它看起来像角度发生了巨大的变化 - 它只是'翻身'.另外,这会搞砸我的角速度计算,这是根据点之间的变化来计算的.最初,我只是尝试通过向低于0的所有值添加180来将图形转换为0-360比例.这不起作用.

这是图表,因此您可以更好地理解问题(图表是在我尝试0-360转换后).

胡说

我的问题

我想知道是否有一个不同的功能,我可以用来计算角度,这将给我一个不断增加的值,一种修改数据以便绘制得很好的方法,或者一种修改图形的方法,使它看起来很直观?

提前致谢!

matlab plot graph angle atan2

4
推荐指数
1
解决办法
533
查看次数

ScenKit eulerAngles 旋转期间的奇怪值

我正在使用以下几行旋转 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)

angle rotation scenekit swift

4
推荐指数
1
解决办法
2590
查看次数

从方向向量获取角度?

我有这个简单的函数来设置矢量的角度.它有效地获取向量的当前幅度(长度),计算角度并将角度从弧度转换为度.然后我将角度应用于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)

javascript vector angle direction

4
推荐指数
1
解决办法
6483
查看次数

计算Python(斜率x)和水平之间的Python角度(度)

我需要计算一条线和水平线之间的角度.我的高中数学似乎让我失望了.

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.diffscipy.stats.linregress,但没有成功,无论是.

python math numpy time-series angle

4
推荐指数
1
解决办法
1万
查看次数