小编Mat*_*yla的帖子

点在地球地球上的多边形

我有一个定义多边形的坐标列表(纬度,经度).它的边缘是通过将两个点与弧相连接而创建的,弧是这些点之间的最短路径.

我的问题是确定是否有另一个点(让我们称之为U)放入或放出多边形.我一直在寻找网络几个小时寻找一个完整的算法,不会有任何缺陷.这就是我希望我的算法支持和接受什么(就可能的弱点而言):

  1. 地球可以被视为一个完美的球体(据我所知,它导致0.3%的精度损失,我很好).
  2. 它必须正确处理跨越国际日期变更线的多边形.
  3. 它必须正确处理跨越北极和南极的多边形.

我决定实施以下方法(作为适用于2D场景的光线投射算法的修改).

  1. 我想选择多边形之外的点S(纬度,经度).
  2. 对于定义单个边的每对顶点,我想计算大圆(让我们称之为G).
  3. 我想计算一对点SU的大圆.
  4. 对于第2点中定义的每个大圆,我想计算这个大圆是否与G相交.如果是这样,我将检查交叉点是否位于多边形的边缘.
  5. 我将计算有多少个交叉点,并根据它(偶数/奇数)我将决定点U是否在多边形的内部/外部.

我知道如何实现计算从点2到5,但我没有线索如何选择起点小号.它在2D平面上并不那么明显,因为我不能只选择最左边点左边的点.

关于如何选择这一点(S)以及我的方法是否合理且最佳的任何想法?

感谢您的任何意见!

algorithm math geospatial point-in-polygon

7
推荐指数
1
解决办法
1150
查看次数

为什么JIT在启动时编译一些方法?

我正在研究一个非常简单的代码块上的JIT行为:

public class PlayWithAssembly {

    public static void main(String[] args) {
        Random random = new Random();
        random.nextInt();
    }
}
Run Code Online (Sandbox Code Playgroud)

实际上,就我的问题而言,该main方法的内容完全无关紧要.我在Ubuntu 16.04.5上使用OpenJDK 10.0.1并使用以下命令运行以下代码 java -Xbatch -XX:+PrintCompilation -XX:CompileThreshold=1000000 -cp target/classes com.xxx.playground.internal.bytecode.PlayWithAssembly

由于CompileThreshold设置为一个非常高的值,我不希望JIT编译任何东西,我宁愿期望JVM在这个例子的实践中完全在解释模式下运行.但是在运行上面的命令时,我得到了一个已编译的方法列表(所有这些方法都是JDK的一部分):

 47    1    b  3       java.lang.StringLatin1::hashCode (42 bytes)
 50    2    b  3       java.util.concurrent.ConcurrentHashMap::tabAt (22 bytes)
 51    3     n 0       jdk.internal.misc.Unsafe::getObjectVolatile (native)   
 55    4    b  3       java.lang.Object::<init> (1 bytes)
 56    5    b  3       java.lang.String::isLatin1 (19 bytes)
 56    6    b  3       java.lang.String::hashCode (49 bytes)
 57    7    b  3       java.lang.String::coder …
Run Code Online (Sandbox Code Playgroud)

java optimization jit jvm

3
推荐指数
1
解决办法
66
查看次数

Hibernate + MySQL中的布尔映射问题

我知道这个问题上有很多话题,但我仍然无法解决我的问题.

这是实体类:

@Entity
@Table(name = "messages")
public class Message
{
....
@Column(name = "read", nullable = false, columnDefinition = "TINYINT(1)")
private boolean read;
....
public boolean isRead()
{
    return read;
}

public void setRead(boolean read)
{
this.read = read;
}
Run Code Online (Sandbox Code Playgroud)

messagesMySQL表中,read列的类型为tinyint(1).在将对象保存到表之前我设置了setRead(true).当我通过Hibernate(save())保存对象时,我收到以下错误:

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in 
your SQL syntax; check the manual that corresponds to your MySQL server version 
for the right syntax to use near 
'read, senderId, title) …
Run Code Online (Sandbox Code Playgroud)

mysql hibernate spring-mvc hibernate-mapping

2
推荐指数
1
解决办法
1421
查看次数