gpt4 book ai didi

j - 独立旋转矩阵列的更好方法

转载 作者:行者123 更新时间:2023-12-05 00:46:22 24 4
gpt4 key购买 nike

作为我学习 j 之旅的一部分,我实现了一种计算多边形面积的技术,我在 Futility Closet 中遇到过。 .我想出了一个解决方案,但它很不优雅,所以我对更好的方法感兴趣:

   polyarea =: -:@((+/@((1&{&|:)*(0{&|:1&|.)))-(+/@((0&{&|:)*(1{&|:1&|.))))
y =: 2 7 9 5 6,.5 7 1 0 4
polyarea y
20

该技术旋转一列并获取列的点积,然后在旋转另一列后执行相同操作。面积是这两个结果之差的一半。

有兴趣的建议!

最佳答案

我认为他们的技术归结为使用行列式找到多边形的面积 http://mathworld.wolfram.com/PolygonArea.html

但是使用 Futility Closet 技术,我会首先通过将第一个点添加到末尾来关闭多边形。

   y =: 2 7 9 5 6,.5 7 1 0 4
close=: (, {.)
close是一个钩子(Hook),它接受第一对并将其附加到末尾

然后一次取两个点,这基本上就是他们对列和旋转所做的事情
   dets=: 2 (-/ . *)\ close  
dets取每对点的行列式 - 如果点按顺时针顺序排列,则结果为负

然后将这些值和过程作为答案。
   clean=: |@:-:@:(+/)   
clean对行列式求和,除以 2 并返回结果的绝对值。
   clean @: dets y
20

要以完整的默认形式查看结果,我们可以依靠 f.副词(修复)来扁平化我们的定义。
   clean @: dets f.
|@:-:@:(+/)@:(2 -/ .*\ (, {.))

这只是查看他们在做什么的不同方式,但它允许 J 使用 .连词(点积)和 \副词(中缀)用行列式处理所有这些旋转。

希望这可以帮助。

关于j - 独立旋转矩阵列的更好方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54214681/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com