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

时间:2019-01-16 10:07:49

标签: j

在学习j的过程中,我实现了一种计算在Futility Closet中遇到的多边形面积的技术。我想出了一个解决方案,但是它非常精致,所以我对更好的方法感兴趣:

e: [kapt] An exception occurred: android.databinding.tool.util.LoggedErrorException: failure, see logs for details.
AndroidX Error: Both old and new data binding packages are available in dependencies. Make sure you've setup jettifier  for any data binding dependencies and also set android.useAndroidx in your gradle.properties file.
    at android.databinding.tool.util.L.printMessage(L.java:134)
    at android.databinding.tool.util.L.e(L.java:107)
    at android.databinding.tool.Context.discoverAndroidX(Context.kt:62)

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

对建议感兴趣!

1 个答案:

答案 0 :(得分:4)

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

但是使用Futility Closet技术,我首先要通过在末端添加第一个点来封闭多边形。

   y =: 2 7 9 5 6,.5 7 1 0 4
   close=: (, {.)  

close是一个钩子,将第一对钩子附加到末尾

然后一次将行列式取两点,这实际上是行列式和旋转式的作用

   dets=: 2 (-/ . *)\ close  

dets取每对点的行列式-如果这些点按顺时针顺序排列,则结果为负

然后使用这些值和答案进行处理。

   clean=: |@:-:@:(+/)   

clean将行列式求和,除以2,然后返回结果的绝对值。

   clean @: dets y
20

要以完全默认的形式查看结果,我们可以依靠f.副词(Fix)来展平我们的定义。

   clean @: dets f.
|@:-:@:(+/)@:(2 -/ .*\ (, {.))

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

希望这会有所帮助。