【问题标题】:Java finding Point on a circle playing upJava在一个圆圈上找到点
【发布时间】:2018-12-06 23:09:46
【问题描述】:

我有以下等式可以在圆上找到一个点:

x = (int) (10 * Math.cos(45.0));
y = (int) (10 * Math.sin(45.0));
x1 = new Point(x, y);

然后我从圆心到这个新点画一条线。

我原以为改变 Math.cos 和 Math.sin 函数的参数会改变直线从中心出来的角度,但是当我测试这个时,它是圆的半径,如果更改,则更改绘制线条的角度。

我误解了数学吗?这里出了什么问题?

这是用上述等式从中心圆绘制的线,尽管它应该只与该中心圆的半径一样长

这是等式为:

x = (int) (350 * Math.cos(45.0));
y = (int) (350 * Math.sin(45.0));
x1 = new Point(x, y);    

【问题讨论】:

标签: java math point


【解决方案1】:

Math.cosMath.sin 被记录为接受弧度,而不是度数

使用Math.toRadiansMath. toDegrees在它们之间进行转换

cos

public static double cos​(double a)

返回 角的三角余弦。特殊情况:
* 如果参数为 NaN 或无穷大,则结果为 NaN。

计算结果必须在精确结果的 1 ulp 范围内。结果 必须是半单调的。

参数:
    a - 角度,以弧度为单位。
返回:
    余弦 论据。

【讨论】:

  • 这样的问题猜对了。
  • @SergGr 这是我犯过不止一次的错误?
  • 这实际上似乎并不影响输出。事实上,无论我在 cos 和 sin 的参数中输入什么 double 值,结果线仍然和第一张图片一样长 :(
  • @MichaelTracey Runnable example 其他一切都是猜测。你也可以看看 thisthisthis
  • @MadProgrammer 你是对的,这是我的实现中出现的其他问题:) 谢谢
【解决方案2】:

您的代码中似乎实际上有不止一个错误。如果您显示为Minimal, Complete, and Verifiable example 的完整代码,那将非常有帮助。这里还有一些猜测:

  1. 假设xcyc是圆心变量,R是半径,则圆上的点alpha

    x = R * Math.cos(alpha) + xc; y = R * Math.sin(alpha) + yc;

在您的代码中,您的xcyc 看起来都是0,因此您可以有效地从圆心到圆心(0,0) 在Java 2d 中绘制一条线世界是屏幕的左上角。

  1. 正如 MadProgrammer 指出的那样,Math.cosMath.sin 以弧度表示参数,45.0 的值建议您使用度数。使用Math.toRadians 可能会解决此问题。

可能还有更多问题,但根据问题的当前状态很难猜测。

【讨论】:

    猜你喜欢
    • 2017-06-13
    • 1970-01-01
    • 1970-01-01
    • 2017-11-23
    • 1970-01-01
    • 1970-01-01
    • 2020-03-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多