小编Gio*_*Gio的帖子

计算多个纬度/经度坐标对的中心点

给定一组纬度和经度点,如何计算该集合中心点的纬度和经度(也就是将所有点的视图居中的点)?

编辑:我用过的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)

math geo latitude-longitude

134
推荐指数
8
解决办法
10万
查看次数

了解c ++分配的内存量

我正在尝试更好地理解在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)

c++ memory valgrind memory-management

22
推荐指数
1
解决办法
3573
查看次数

numpy数组,a/= x与a = a/x之间的差异

我正在使用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).

python arrays numpy in-place integer-division

20
推荐指数
1
解决办法
2219
查看次数

android opengl-es-2.0 - rotateM解释

我从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)

android opengl-es-2.0

10
推荐指数
1
解决办法
3383
查看次数

VIM以只读模式垂直拆分打开文件

在vim中,我可以使用该命令以垂直分割vs myfile.txt打开文件,我可以在新的编辑器中以只读模式打开文件vim -R myfile.txt.

我想将这些命令与命令结合起来,理想情况下是-R myfile.txt,但当然我已经发现它不起作用.我想以这种方式打开文件,因为我在另一个选项卡中打开了文件,我想确保我不会意外地编辑该文件.

vim

9
推荐指数
1
解决办法
2989
查看次数

通过套接字文件描述符上的ioctl调用获取数据包时间戳

我正在研究运行嵌入式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调用似乎失败了?

c sockets embedded-linux

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

Write a header at every logfile that is created with a time-rotating logger

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)

python logging

5
推荐指数
1
解决办法
2026
查看次数

将文件移动到〜/ .trash,具有唯一的文件名

我的〜/ .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脚本.

bash

4
推荐指数
1
解决办法
221
查看次数

如何创建QList的深层副本(Qt 4.8)

我正在尝试制作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&) - 这是一个深层复制构造函数吗?因为这个问题隐含地询问如何创建深层副本"而不是如果某些东西是深层副本.

c++ qt

4
推荐指数
1
解决办法
7328
查看次数

重载赋值运算符以返回std :: vector

下面的函数将存储在类中的内容转换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)

c++ c++11

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