给定一组纬度和经度点,如何计算该集合中心点的纬度和经度(也就是将所有点的视图居中的点)?
编辑:我用过的Python解决方案:
Convert lat/lon (must be in radians) to Cartesian coordinates for each location.
X = cos(lat) * cos(lon)
Y = cos(lat) * sin(lon)
Z = sin(lat)
Compute average x, y and z coordinates.
x = (x1 + x2 + ... + xn) / n
y = (y1 + y2 + ... + yn) / n
z = (z1 + z2 + ... + zn) / n
Convert average x, y, z coordinate to latitude and longitude.
Lon = atan2(y, …Run Code Online (Sandbox Code Playgroud) 我正在尝试更好地理解在c ++中分配在堆上的内存量.我写了一个小测试程序,除了填充一些2D矢量之外什么都没做.我在linux 64bit VM上运行它并使用valgrind的massif工具来分析内存.
我正在运行此测试的环境:在Win10上的VirtualBox中运行的Linux VM.VM配置:基本内存:5248MB,4CPU,上限为100%,磁盘类型VDI(动态分配存储).
c ++内存分析测试程序:
/**
* g++ -std=c++11 test.cpp -o test.o
*/
#include <string>
#include <vector>
#include <iostream>
using namespace std;
int main(int argc, char **arg) {
int n = stoi(arg[1]);
vector<vector<int> > matrix1(n);
vector<vector<int> > matrix2(n);
vector<vector<int> > matrix3(n);
vector<vector<int> > matrix4(n);
vector<vector<int> > matrix5(n);
vector<vector<int> > matrix6(n);
vector<vector<int> > matrix7(n);
vector<vector<int> > matrix8(n);
for (int i=0; i<n; ++i) {
for (int j=0; j<n; ++j) {
matrix1[i].push_back(j);
}
}
for (int i=0; i<n; ++i) { …Run Code Online (Sandbox Code Playgroud) 我正在使用python 2.7.3,当我执行以下代码时:
import numpy as np
a = np.array([[1,2,3],[4,5,6]])
a = a / float(2**16 - 1)
print a
Run Code Online (Sandbox Code Playgroud)
这将导致他跟随输出:
>> array([[1.52590219e-05, 3.05180438e-05, 4.57770657e-05],
>> [6.10360876e-05, 7.62951095e-05, 9.15541314e-05]])
Run Code Online (Sandbox Code Playgroud)
正如预期的那样,但是当我执行以下代码时:
import numpy as np
a = np.array([[1,2,3],[4,5,6]])
a /= float(2**16 - 1)
print a
Run Code Online (Sandbox Code Playgroud)
我得到以下输出:
>> array([[0, 0, 0],
>> [0, 0, 0]])
Run Code Online (Sandbox Code Playgroud)
我期望与前面的例子相同的输出,我不明白不同的输出,这似乎是使用a /= float(2**16 - 1)vs 的结果a = a / float(2**16 - 1).
我从android opengl es 2.0开始,我试图掌握这些概念.我写了下面的函数来旋转一个矩形.我通过使用方法rotateM中的值来成功进行一些旋转.但是我没有成功地对我的矩形进行一些具体的旋转,例如将2D向右旋转45度.
基本上我是在盯着android引用,其中说明了以下内容:
rotateM(float [] m,int mOffset,float a,float x,float y,float z)将矩阵m围绕轴(x,y,z)以角度a(以度为单位)旋转到位.
现在我明白我们提供了一个modelMatrix,这个矩阵的偏移和角度旋转,但为什么我们必须提供xyz轴组件,这些值真正做了什么?
希望有人能提前给我一个关于方法rotateM的明确解释,在此先感谢!
private void positionRectangleInScene() {
setIdentityM(modelMatrix, 0);
rotateM(
modelMatrix, // m : source matrix
0, // mOffset : index into m where the matrix starts
0f, // a : angle ato rotate in degrees
1f, // x : x-axis component
1f, // y : y-axis component
1f); // z : z-axis component
multiplyMM(
modelViewProjectionMatrix, 0,
viewProjectionMatrix, 0,
modelMatrix, 0);
}
Run Code Online (Sandbox Code Playgroud) 在vim中,我可以使用该命令以垂直分割vs myfile.txt打开文件,我可以在新的编辑器中以只读模式打开文件vim -R myfile.txt.
我想将这些命令与命令结合起来,理想情况下是-R myfile.txt,但当然我已经发现它不起作用.我想以这种方式打开文件,因为我在另一个选项卡中打开了文件,我想确保我不会意外地编辑该文件.
我正在研究运行嵌入式Linux的系统.我正在尝试从我在套接字上收到的流中获取数据包时间戳.
创建套接字后,我执行以下操作:
if (fd != -1) {
int enabled = 1;
setsockopt(fd, SOL_SOCKET, SO_TIMESTAMP, &enabled, sizeof(enabled);
}
Run Code Online (Sandbox Code Playgroud)
之后我绑定套接字,套接字的类型为SOCK_STREAM.我通过调用函数成功地在套接字上接收数据recv(fd, buf, size, 0).现在,为了获得接收数据的时间戳,我目前正在尝试以下方法:
ret = recv(fd, buf, size, 0);
if (ret > 0) {
struct timeval tv_ioctl;
tv_ioctl.tv_sec = 0;
tv_ioctl.tv_usec = 0;
int error = ioctl(fd, SO_TIMESTAMP, &tv_ioctl);
printf("%ld.%ld - error = %d", (long int)tv_ioctl.tv_sec,
(long int)tv_ioctl.tv_usec, error);
}
Run Code Online (Sandbox Code Playgroud)
printf语句的输出始终如下:
0.0错误= -1
错误= -1表示ioctl调用失败.我已经执行了测试getsockopt以检查是否设置了SO_TIMESTAMP选项,为SO_TIMESTAMP选项getsockopt返回0,因此它似乎正确设置.我在这里有点迷失,我怎么能进一步调查为什么ioctl调用似乎失败了?
I've made a time-rotating logger which creates a new logfile at midnight. In my logfile I want to write a header at the top of every file. I'm looking for an efficient way to call a function which writes this header to the logfile upon the moment that the file is created.
import logging
from logging.handlers import TimedRotatingFileHandler
# create time-rotating log handler
logHandler = TimedRotatingFileHandler(logfile, when='midnight')
# create logger
self.log = logging.getLogger('MyTimeRotatingLogger')
self.log.addHandler(logHandler)
Run Code Online (Sandbox Code Playgroud) 我的〜/ .bashrc中有以下别名
alias del="mv -t ~/.trash"
Run Code Online (Sandbox Code Playgroud)
这会将文件或目录移动到〜/ .trash文件夹.但是,如果我执行以下操作:
del test.txt
touch test.txt
del test.txt
Run Code Online (Sandbox Code Playgroud)
第二个del调用会覆盖〜/ .trash中已存在的文件test.txt,因此我丢失了备份.这当然是不受欢迎的行为.我正在寻找一种方法来调整我的别名,以便移动到〜/ .trash的文件附加了移动到那里的时刻的日期和时间,从而产生唯一的文件名.有人知道如何做到这一点吗?我正在寻找一种简单的方法来调整别名,而不是广泛的bash脚本.
我正在尝试制作QList的深层副本,我正在使用Qt 4.8.在下面的代码中mData是类的QList<unsigned char>成员变量Test.
在第一个例子中,我认为下面的代码应该有效,但是在Qt的隐式共享(即写时复制)概念中深入探讨,我怀疑这是否是正确的方法.
Test::Test(QList<unsigned char> &aData) {
mData.QList(aData);
}
Run Code Online (Sandbox Code Playgroud)
根据Qt,
QList :: QList(const QList&other)
构造其他的副本.
此操作需要恒定时间,因为隐式共享QList.这使得从函数返回QList的速度非常快.如果修改了共享实例,它将被复制(写时复制),并且需要线性时间.
我想确保如果aData超出范围或aData修改内容,这不会改变内容mData.这是否可以,而不必分别迭代和复制每个列表条目?
注意:这不是Qt 4.5的重复- QList :: QList(const QList&) - 这是一个深层复制构造函数吗?因为这个问题隐含地询问如何创建深层副本"而不是如果某些东西是深层副本.
下面的函数将存储在类中的内容转换cVector为a std::vector并返回它.
template <class T> std::vector<T> cVector<T>::convertToStdVector()
{
std::vector<T> vec;
vec.resize(m_nSize);
for (unsigned i = 0; i < m_nSize; ++i) {
vec[i] = m_pData[i];
}
return vec;
}
Run Code Online (Sandbox Code Playgroud)
上面的工作完美,现在不是使用这样的函数,我想重载赋值运算符,基本上做同样的事情.
我尝试过以下方法:
template <class T> class cVector
{
public:
cVector(unsigned nSize, AllocEnum eAllocType=MALLOC);
cVector(T *pData, unsigned nSize, bool bCopy=false);
// convert to std vector
std::vector<T> operator=(const cVector<T> &cvec);
//..
//....
}
template <class T> std::vector<T> cVector<T>::operator=(const cVector<T> &cvec)
{
std::vector<T> vec;
vec.resize(m_nSize);
for (unsigned i = 0; i < …Run Code Online (Sandbox Code Playgroud)