小编the*_*ine的帖子

稳健的多边形法线计算

是否有一个很好的鲁棒算法来计算凸多边形的法向量(当然,在3D中)?对于三角形,很容易:一个取三角形的两个边并计算叉积:

vec3 u = point[0] - point[1], v = point[0] - point[2];
vec3 n = normalize(cross(u, v));
Run Code Online (Sandbox Code Playgroud)

但是这种方法并没有真正扩展到多边形.多边形的某些边缘可能几乎或"完全"共线(这通常发生在发生T形连接的网格中),因此有必要选择一对边,给出"强"法线(两条边都是"足够长"并且它们保持"几乎垂直"的角度).

但是,这种方法仍然不适用于所有多边形.想象一下圆盘形状的多边形.如果细分非常精细,则无论光盘的半径如何,所有边缘都将非常短并且所有连续边缘将几乎共线.与此同时,正常情况非常明确.

一种解决方案可能是找到最大的内切三角形并计算其正常值.然而,发现它将具有复杂性O(n^2),这似乎令人望而却步.

给定所有多边形点,而不仅仅是三个或四个,更好的解决方案是使用SVD或特征值分解来计算法线.

这有标准算法吗?任何人都有一个很好的方法吗?

algorithm 3d geometry numerical-methods

8
推荐指数
1
解决办法
3009
查看次数

类型腐朽 - 它是什么以及它为什么存在?

我很惊讶类型衰减在SO或其他地方没有得到很好的解释,也许我没有使用正确的术语进行搜索,或者我可能没有正确理解整个事情.我的问题是:它是什么,它是如何(为什么)到达那里以及它的规则是什么?


如果你想知道我为什么问,下面是我的啜泣类型衰变故事(不是问题的主题):

我最近在努力学习一些简单的模板,我想做这样的事情:

template <class FunObj>
double DoStuff(FunObj fob) // note that this returns double, not FunObj, as e.g. std::for_each() does
{ /* ... */ }

struct MyFunObj {
    mutable size_t num_invoked; // collect usage statistics

    MyFunObj()
        :num_invoked(0)
    {}

    bool operator ()(double some_arg) const
    {
        ++ num_invoked;
        return sin(some_arg) < .5;
    }
};
Run Code Online (Sandbox Code Playgroud)

这很好,有一个期望函数对象的模板函数和一个函数对象.该函数被设计为不返回函数对象的状态(因为类似的函数经常这样做;它返回了一些复杂计算的结果),所以我认为我会把它专门用于对象的引用.但类型衰减阻碍了(或者至少是我对它的理解):

MyFunObj fob;
DoStuff(fob); // passed by value, usage statistics are lost (no surprise here)

MyFunObj &ref = fob;
DoStuff(ref); // MyFunObj& …
Run Code Online (Sandbox Code Playgroud)

c++ types

8
推荐指数
1
解决办法
1427
查看次数

排序一对向量

我知道如何对一对矢量进行排序,但是你如何对一对矢量进行排序?我可以考虑在一对向量上编写一个自定义的"虚拟"迭代器并对其进行排序,但这看起来非常复杂.有没有更简单的方法?C++ 03中有一个吗?我想用std::sort.

当处理在硬件中生成的一些数据时出现这个问题,其中一对数组比对数组更有意义(从那时起会出现各种步幅和对齐问题).我意识到,否则保持一对向量而不是对的向量将是一个设计缺陷(数组问题的结构).我正在寻找一个快速的解决方案,将数据复制到成对的向量然后返回(我将它返回到HW以进行更多处理)不是一个选项.

例:

keys   = {5, 2, 3, 1, 4}
values = {a, b, d, e, c}
Run Code Online (Sandbox Code Playgroud)

排序后(通过第一个向量):

keys   = {1, 2, 3, 4, 5}
values = {e, b, d, c, a}
Run Code Online (Sandbox Code Playgroud)

我将"一对矢量"称为一对keysvalues(存储为例如std::pair<std::vector<size_t>, std::vector<double> >).矢量具有相同的长度.

c++ sorting vector

8
推荐指数
1
解决办法
958
查看次数

cv :: imshow有时很慢

我遇到了问题cv::imshow.对于我的图像尺寸,它通常消耗大约1-2毫秒的处理时间,但在我的处理管道中的某个时刻,对于相同类型的图像,它使用4-8毫秒.

我有一个方法

void Tool::displayImage()
{
   startTimeMeasure();
   cv::imshow("output",image);
   evaluateTimeMeasure();
}
Run Code Online (Sandbox Code Playgroud)

image是一个成员变量,highgui窗口是在其他地方创建的.时间测量与boost::posix_time ptimetime_duration.

cvStartWindowThread();
Run Code Online (Sandbox Code Playgroud)

被称为.

关键是,如果displayImage()在复杂的处理链中调用(从视频文件加载图像,某些预处理等),则cv::imshow变得非常慢,而在"暂停"视频中调用以重绘更新的图像的速度非常快.

如果我cv::waitKey(10)在时间测量开始之前添加一个cv::imshow,也变得快速.所以可能会有一些(gui?)需要处理哪些块cv::imshowcv::waitKey(40)在循环中的单独线程中调用,等待键盘输入来控制(例如暂停/恢复)视频.据我所知,cv::imshow是在某种cv::waitKey时间段处理的队列中执行的?!?在哪里可以找到有关在此期间执行的所有任务的信息?也许我可以重新安排我的代码的某些部分(现在真的很复杂),以便一直保持更快imshow.

那么在一个cv::imshow调用中会发生什么,以及在不同情况下同一个调用缓慢/快速执行的原因是什么?

编辑:在"暂停"模式下我在常规执行和处理之间识别的一个区别是,在暂停模式下,该方法是从绑定的鼠标回调函数(来自windowThread?中)启动的,而在常规模式下,它是从主处理线程启动的.

c++ performance opencv highgui imshow

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

快速排序3个值

我有一个三个浮点值的数组,我想按升序对它们进行排序(尽管任何排序算法的顺序都可以很容易地反转).调用std :: sort似乎有点矫枉过正:

float values[3] = {...};
std::sort(values, values + 3);
Run Code Online (Sandbox Code Playgroud)

你可以这样做:

float sorted[3] = {min(values), values[0] + values[1] + values[2] -
    min(values) - max(values), max(values)};
Run Code Online (Sandbox Code Playgroud)

但这看起来很丑陋.添加和减去数字也可以改变中间排序元素的值.并且它不容易就地工作.也很有趣:

float sorted[3];
/*for(int i = 0; i < 3; ++ i) { // unroll
    sorted[(values[i] > values[0]) + (values[i] > values[1]) +
        (values[i] > values[2])] = values[i];
}*/ // this is broken, does not work if two or all values are equal
sorted[(values[0] > values[1]) + (values[0] > values[2])] = values[0];
sorted[(values[1] >= …
Run Code Online (Sandbox Code Playgroud)

c++ arrays sorting algorithm

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

排列中的交换次数

是否有一种有效的算法(在大O表示法方面有效)来找到交换数量以将置换P转换为身份置换I?交换不需要在相邻元素上,而是在任何元素上.

例如:

I = {0, 1, 2, 3, 4, 5}, number of swaps is 0
P = {0, 1, 5, 3, 4, 2}, number of swaps is 1 (2 and 5)
P = {4, 1, 3, 5, 0, 2}, number of swaps is 3 (2 with 5, 3 with 5, 4 with 0)
Run Code Online (Sandbox Code Playgroud)

一个想法是编写这样的算法:

int count = 0;
for(int i = 0; i < n; ++ i) {
    for(; P[i] != i; ++ count) { // could be permuted multiple …
Run Code Online (Sandbox Code Playgroud)

c++ algorithm permutation

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

在参数传递中无法将'const char*'转换为'WCHAR*'

我有文件写的用户名,IP和密码必须是const char*,当我把变量输入const char,我收到此错误信息.

这是我的代码:

#include <cstdlib>
#include <iostream>
#include <stdio.h>
#include <windows.h>

using namespace std;

typedef int (__cdecl *MYPROC)(LPWSTR);

int main()
{
    HINSTANCE hinstDLL;
    MYPROC ProcAdd;   
    hinstDLL = LoadLibrary("LmServerAPI.dll");
    if(hinstDLL != NULL){
        ProcAdd = (MYPROC) GetProcAddress(hinstDLL,"LmServer_Login");            
        if(ProcAdd != NULL){
            const char* IP = "xxx.177.xxx.23";
            const char* name = "username";
            const char* pass = "password";
            int port = 888;
            ProcAdd(IP,port,name,pass);
            system ("pause");          
        }          
    }
}
Run Code Online (Sandbox Code Playgroud)

我收到了这个错误:

const char*' to在参数传递中无法转换WCHAR*'

我必须使用哪种变量用于这些参数以及如何使用?

c++ char wchar

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

Doxygen:如何链接到带注释的源代码?

我的库有一个非常简单的Main.cpp文件示例,我有一个教程页面.该页面看起来像这样:

/**
 *  @page simpleexample Simple Example
 *
 *  This example shows basic use. It is in \ref simple_example/Main.cpp.
 *
 *  And this is the description of the example.
 */
Run Code Online (Sandbox Code Playgroud)

现在它做的是它simple_example/Main.cpp通过指向该文件文档的链接替换引用.我希望它直接转到带注释的源代码.

有没有办法在不完全禁用每个文件的情况下执行此操作?我想拥有它,但我不喜欢人们需要单击Main.cpp链接,然后再单击Go to the source code of this file.内部链接.我不太关心文件部分中的链接如何表现,尽管我宁愿让它们转到文件文档,就像默认情况下那样.

我不想在教程页面中使用\example任何一个包含源代码,因为它已经存在于单独解释的小部分中.

c++ doxygen

6
推荐指数
1
解决办法
5282
查看次数

如何删除amcharts中的leftside scale

如何在am-charts中删除侧刻度轴.例如.在这个小提琴我想删除顶部鳞片和左鳞片.我需要操纵什么属性或方法.

演示图表. http://jsfiddle.net/JSTQW/

目前,我使用此代码绘制图表:

chart = new AmCharts.AmSerialChart();    
chart.dataProvider = chartData1;   //data provider for chart
chart.categoryField = "year";   //this is the side category year field
chart.startDuration = 1;       //this is the chart plotting time
chart.plotAreaBorderColor = "#ffffff";  //side div rectangular border
chart.plotAreaBorderAlpha = 15;
// this single line makes the chart a bar chart
chart.rotate = true;
chart.columnWidth=0.2;
// AXES
// Category
var categoryAxis = chart.categoryAxis;
categoryAxis.gridPosition = "start";
categoryAxis.gridAlpha = 0.1;
categoryAxis.axisAlpha = 0;

// Value
var valueAxis = …
Run Code Online (Sandbox Code Playgroud)

amcharts

6
推荐指数
2
解决办法
9069
查看次数

在spring mvc上传图片

我正在使用spring 4和hibernate 4来上传数据库并从中检索图像.我已将多部分图像转换为字节数组并存储在数据库中.我的查询是如何从数据库中检索该图像并在jsp中显示字节数组而不将其存储在本地系统中.

java model-view-controller jsp hibernate spring-mvc

6
推荐指数
1
解决办法
6761
查看次数