isdkz 发表于 2022-3-19 21:01:08

数学编程题

函数 main() 接收两个表示从坐标原点出发的二维向量的元组 vector1 和 vector2,

例如 (3,0) 表示从坐标原点 (0, 0) 到坐标 (3, 0) 的向量,

要求返回两个向量 vector1 和 vector2 的夹角(单位为度,数值大小在 0 到 180 之间),

并且要求结果恰好保留 2 位小数,例如向量 (3, 0) 和 (0, 4) 的夹角为 90.00。

删除下面代码中的 pass 语句,替换为自己的代码,完成要求的功能。

代码已导入的标准库对象不是必须使用的,可以自己决定是否使用。

from operator import mul
from math import acos, degrees

def main(vector1, vector2):
    pass

人造人 发表于 2022-3-19 21:01:09

嗯,上面的代码不对,还得考虑点在第几象限的问题,我再想一想

$ cat main.py
#!/usr/bin/env python
#coding=utf-8

from math import sqrt, pow, acos, fabs, degrees

def angle(A, B):
    c = sqrt(pow(A, 2) + pow(A, 2))
    n = 90 - degrees(acos(A / c))
    c = sqrt(pow(B, 2) + pow(B, 2))
    m = 90 - degrees(acos(B / c))
    n = n if A >= 0 else (90 - n) * 2 + n
    m = m if B >= 0 else (90 - m) * 2 + m
    return fabs(n - m)

print(angle((3, 9), (4, 5)))
print(angle((3, 0), (0, 4)))
print(angle((-3, 9), (4, 5)))
print(angle((3, 0), (0, -4)))
$ ./main.py
20.224859431168056
90.0
57.094757077012105
90.0
$

人造人 发表于 2022-3-19 22:53:24

本帖最后由 人造人 于 2022-3-19 22:54 编辑

不知道有没有漏掉一些特殊情况,多给几组输入输出看看

$ cat main.py
#!/usr/bin/env python
#coding=utf-8

from math import sqrt, pow, acos, fabs, degrees

def angle(A, B):
    c = sqrt(pow(A, 2) + pow(A, 2))
    n = acos(A / c)
    c = sqrt(pow(B, 2) + pow(B, 2))
    m = acos(B / c)
    x = fabs(n - m)
    return degrees(x)

print(angle((3, 9), (4, 5)))
print(angle((3, 0), (0, 4)))
print(angle((-3, 9), (4, 5)))
print(angle((3, 0), (0, -4)))
$ ./main.py
20.224859431168067
90.0
20.224859431168067
90.0
$

isdkz 发表于 2022-3-19 23:28:21

人造人 发表于 2022-3-19 22:53
不知道有没有漏掉一些特殊情况,多给几组输入输出看看

非常感谢大佬,但是有两组数据不通过,再看看是什么问题呗,

我不懂这个反余弦函数{:5_96:}


isdkz 发表于 2022-3-19 23:49:30

人造人 发表于 2022-3-19 21:01
嗯,上面的代码不对,还得考虑点在第几象限的问题,我再想一想

谢谢大佬,可以了,可以说说这道题的思路是怎样的吗?

反余弦是哪条边比哪条边呀,这数学好让人凌乱呀{:5_96:}

人造人 发表于 2022-3-19 23:56:03

isdkz 发表于 2022-3-19 23:49
谢谢大佬,可以了,可以说说这道题的思路是怎样的吗?

反余弦是哪条边比哪条边呀,这数学好让人凌乱 ...

https://baike.baidu.com/item/%E4%B8%89%E8%A7%92%E5%87%BD%E6%95%B0%E5%85%AC%E5%BC%8F/4374733?fr=aladdin

isdkz 发表于 2022-3-20 00:03:21

人造人 发表于 2022-3-19 23:56
https://baike.baidu.com/item/%E4%B8%89%E8%A7%92%E5%87%BD%E6%95%B0%E5%85%AC%E5%BC%8F/4374733?fr=ala ...

好的,谢谢大佬
页: [1]
查看完整版本: 数学编程题