(三维)我正在寻找一种计算两个向量之间的有符号角度的方法,除了那些向量之外没有其他信息.正如在这个问题中所回答的那样,在给定矢量垂直的平面法线的情况下计算有符号角是很简单的.但是如果没有这个价值我就无法做到这一点.很明显,两个向量的交叉乘积产生了这样的正常,但是我使用上面的答案遇到了以下矛盾:
signed_angle(x_dir, y_dir) == 90
signed_angle(y_dir, x_dir) == 90
Run Code Online (Sandbox Code Playgroud)
我希望第二个结果是否定的.这是因为cross(x_dir, y_dir)在cross(y_dir, x_dir)给定以下具有标准化输入的伪代码的情况下,叉积与反方向相反:
signed_angle(Va, Vb)
magnitude = acos(dot(Va, Vb))
axis = cross(Va, Vb)
dir = dot(Vb, cross(axis, Va))
if dir < 0 then
magnitude = -magnitude
endif
return magnitude
Run Code Online (Sandbox Code Playgroud)
我不相信dir永远不会消极.
我已经看到了建议的atan2解决方案的相同问题.
我正在寻找一种方法:
signed_angle(a, b) == -signed_angle(b, a)
Run Code Online (Sandbox Code Playgroud) 我发现在编写代码时添加了警告,这些代码编写了一个文件正文在编译期间执行两次的宏.是否有一个原因?这是leiningen特有的吗?我无法重现这一点(compile ...).
简化版:
(ns foo.core
(:require foo.bar))
;; empty
Run Code Online (Sandbox Code Playgroud)
(ns foo.bar)
(println "hello")
Run Code Online (Sandbox Code Playgroud)
$ lein编译:全部
编译foo.core
hello编译foo.bar
hello
进一步测试表明在编译期间命名空间在其自身上重新加载:
(ns foo.bar)
(declare wasd)
(println wasd)
(def wasd 2)
Run Code Online (Sandbox Code Playgroud)
$ lein干净
$ lein编译:全部
编译foo.core
#<Unbound Unbound: #'foo.bar/wasd>编译foo.bar
2
在一个更复杂的情况下,我在编译期间发生这种情况,然后每次运行或从lein开始一次repl.我不知道为什么.这完全是clojure 1.6和leiningen 2.5.0.
我在处理一些张量流代码(v1.13.1)时注意到了这种微妙之处:
tf.enable_eager_execution()
for n in Dataset.from_tensor_slices(([1, 2], [3, 4])).make_one_shot_iterator():
print(n)
#
# prints:
# (<tf.Tensor: id=8, shape=(), dtype=int32, numpy=1>, <tf.Tensor: id=9, shape=(), dtype=int32, numpy=3>)
# (<tf.Tensor: id=12, shape=(), dtype=int32, numpy=2>, <tf.Tensor: id=13, shape=(), dtype=int32, numpy=4>)
#
for n in Dataset.from_tensor_slices([[1, 2], [3, 4]]).make_one_shot_iterator():
print(n)
#
# prints:
# tf.Tensor([1 2], shape=(2,), dtype=int32)
# tf.Tensor([3 4], shape=(2,), dtype=int32)
#
Run Code Online (Sandbox Code Playgroud)
上面的区别是第一个循环传递元组中的两个张量,第二个循环传递列表中的两个张量。我预计第二个循环的工作方式与第一个循环相同,对张量进行切片。这是 tf 处理传入元组和列表的方式故意不同吗?
3d ×1
clojure ×1
compilation ×1
geometry ×1
leiningen ×1
math ×1
python ×1
tensorflow ×1
vector ×1