标准凸包算法不适用于(经度,纬度)点,因为标准算法假设您需要一组笛卡尔点的船体.纬度 - 经度点不是笛卡尔坐标,因为经度在反子午线(+/- 180度)处"环绕".即,经度179以东两度是-179.
因此,如果您的一组点恰好跨越反子午线,您将计算出错误地在世界各地伸展的虚假船体.
我可以使用标准凸包算法来解决这个问题的任何建议,或指向正确的"地球"船体算法?
现在我想起来,有更多有趣的案例需要考虑而不是跨越反梅迪安.考虑一个包围地球的点"带" - 它的凸包将没有东/西边界.或者甚至更进一步,{(0,0),(0,90),(0,-90),(90,0),( - 90,0),(180,0)}的凸包是什么? - 它似乎包含整个地球表面,所以它的周边有哪些点?
geometry geospatial latitude-longitude convex-hull computational-geometry
我试图让Vim语法高亮显示任何以扩展名结尾的文件,.Rtex
方法如下:
\begin{python}...\end{python}
都突出显示为Python我能够单独实现这些标准中的每一个,但无法同时实现这两个标准.我认为以某种方式TeX突出显示覆盖了我突出显示的Python区域,或者阻止它们生效,我不知道如何弄清楚.
第一步:编辑.vimrc
以提供扩展名为.Rtex
filetype的文件rtex
:
au BufRead *.Rtex setf rtex
Run Code Online (Sandbox Code Playgroud)
第二步:创造~/.vim/syntax/rtex.vim
.这个文件的内容将决定如何突出显示.Rtex
文件.
第三步:通过如下所示启用一般的顶级TeX突出显示rtex.vim
:
runtime! syntax/tex.vim
Run Code Online (Sandbox Code Playgroud)
如果我现在打开一个.Rtex
文件,整个文件将突出显示为TeX,包括其中的任何文本\begin{python}...\end{python}
,如预期的那样.
第四步:按照Vim中的说明:help syn-include
包含python高亮显示,并将其应用于由\begin{python}
和分隔的所有区域\end{python}
.我的rtex.vim
文件现在看起来像这样:
runtime! syntax/tex.vim
unlet! b:current_syntax
syntax include @Python syntax/python.vim
syntax region pythonCode start="\\begin{python}" end="\\end{python}" contains=@Python
Run Code Online (Sandbox Code Playgroud)
该unlet! b:current_syntax
命令旨在强制python.vim
执行语法文件,即使现有语法(TeX)已经处于活动状态.
问题:如果我现在打开一个.Rtex
文件,整个文件仍然只作为TeX突出显示.该\begin{python}...\end{python}
地区似乎没有任何影响.
实验:如果我删除或注释掉的runtime!
命令,我办 …
我想编写一个自定义JSP标记,其输出包括其他JSP标记,这些标记本身也应该被动态评估.但显然我的TagSupport
子类所写的所有内容pageContext.getOut()
都直接发送给客户端而没有任何进一步的评估.
我觉得这应该很简单,因为它似乎是人们想要使用自定义标签的第一件事:封装和重用其他自定义标签,避免代码重复.
如何使以下代码执行它显然想做的事情?:
public class MyTag extends TagSupport {
public int doStartTag() throws JspException {
try {
pageContext.getOut().println(
"The output from this tag includes other tags " +
"like <mypackage:myOtherTag>this one</mypackage:myOtherTag> " +
"which should themselves be evaluated and rendered."
)
} catch (IOException e) {
throw new JspException(e);
}
return SKIP_BODY;
}
}
Run Code Online (Sandbox Code Playgroud)
编辑:我的特定用例的一些背景,如果它有帮助.我有一个自定义标签<user>
,它以对我的应用程序有用的方式动态呈现用户名(鼠标悬停在名字,姓氏,电话号码等).我现在正在编写另一个<comment>
用于显示用户注释的标记,我想使用我现有的<user>
标记在<comment>
标记的输出中呈现用户名.
我可以编写可以很好地捕获的 shell 脚本SIGINT
,但我似乎无法捕获SIGQUIT
.
#!/bin/bash
function die {
echo "Dying on signal $1"
exit 0
}
trap 'die "SIGINT"' SIGINT
trap 'die "SIGQUIT"' SIGQUIT
while true; do
echo "sleeping..."
sleep 5
done
Run Code Online (Sandbox Code Playgroud)
执行此脚本并按下CTRL-C
具有所需的效果,但是按下CTRL-\
(据我所知,应该触发)除了在终端中SIGQUIT
打印之外没有任何作用。^\
为什么?
我有两个运行理论。首先,SIGINT
和 的语义SIGQUIT
不同,SIGQUIT
仅发送到子进程sleep
,而同时SIGINT
发送到子进程和父 bash 进程。如果是这种情况,它在哪里记录?
我的第二个理论是 bash 不仅默认忽略(即有一个无操作处理程序)SIGQUIT
(如手册页所示),而且根本不允许它被捕获。该理论与第一个理论重叠,因为父级和子级都可能出现这种情况SIGQUIT
,但父级 ( bash
) 无法捕获它。如果是这种情况,有什么方法可以捕获SIGQUIT
bash 脚本吗?...也许shopt
我可以设置一些?
编辑:这是在 Ubuntu 10.10 上的 …
假设我有一个像这样的R数据帧:
Subject Session Property.A Property.B Property.C
1 100 1 -1.22527548 -0.9193751 -1.7501693
2 100 10 2.30627980 1.8940830 -0.8443976
3 100 2 2.33243332 -0.5860868 -4.2074489
4 100 3 0.38130810 -0.7336206 4.8016230
5 100 4 1.44685875 0.5066249 2.0138624
6 100 5 0.08907721 -0.3715202 1.4983700
Run Code Online (Sandbox Code Playgroud)
我听说过这种称为"短格式"或"宽格式"的数据框架.现在假设我想让它看起来像这样,我听说它叫做"长形式":
Subject Session Property Value
1 100 1 A -1.2252754
2 100 1 B -0.9193751
3 100 1 C -1.7501693
4 100 2 A 2.3324333
5 100 2 B -0.5860868
6 100 2 C -4.2074489
Run Code Online (Sandbox Code Playgroud)
也就是说,我有N列,我想减少到只有两个"名称/值"列,数据框中的任何其他列根据需要扩展重复值.
显然我可以用一堆for循环执行这个转换,但这看起来真的很难看,如果/当我添加更多属性列时,维护是很痛苦的.
有没有办法在R中用几行代码做到这一点?我还没有发现一些神奇的功能组合?