我有四个2d点,p0 =(x0,y0),p1 =(x1,y1)等,形成一个四边形.在我的例子中,四边形不是矩形,但至少应该是凸面.
p2 --- p3
| |
t | p |
| |
p0 --- p1
s
Run Code Online (Sandbox Code Playgroud)
我正在使用双线性插值.S和T在[0..1]范围内,插值点由下式给出:
bilerp(s,t) = t*(s*p3+(1-s)*p2) + (1-t)*(s*p1+(1-s)*p0)
Run Code Online (Sandbox Code Playgroud)
这是问题..我有一个2d点p,我知道它在四边形内.我想在使用双线性插值时找到能给我这一点的s,t.
是否有一个简单的公式来反转双线性插值?
谢谢你的解决方案.我将我的Naaff解决方案的实现发布为维基.
我在3d空间中有两个2d圆圈(由中心,法线和半径定义),我试图想出一对点,这是一组最接近的点之一.我知道有1到无限数量的点对,我只需要一对匹配.
有一个简单的方法吗?精度不是必不可少的.两个圆的半径相同,非零值.
如果背景有用,我的整体算法在空间中采用NURBS曲线并沿曲线挤出2d多边形,从而产生变形的圆柱体.我只是在曲线上采样几个点.每个圆的法线是NURBS曲线切线,我试图弄清楚如何对齐相邻的样本,所以我不会得到奇怪的扭曲.似乎相邻样品上的最近点应该对齐.
感谢这里的所有回复..项目的这一部分有点延迟,这就是为什么我还没有测试所有的答案.我肯定会在这里折腾一些图像并在我再次开始工作时给出答案.
我正在尝试将从__DATE__宏生成的字符串转换为time_t.我不需要一个完整的日期/时间解析器,只处理__DATE__宏的格式会很棒.
预处理器方法很漂亮,但函数也可以正常工作.如果相关,我正在使用MSVC.
我有一个c ++应用程序,它在try块中包含大部分代码.当我捕获异常时,我可以将用户返回到稳定状态,这很好.但我不再接收崩溃转储了.我真的想弄清楚代码中的异常发生在哪里,所以我可以记录并修复它.
能够在不停止应用程序的情况下获得转储将是理想的,但我不确定这是否可行.
有什么方法可以找出catch块中抛出异常的位置?如果它有用,我在windows xp及更高版本上使用本机msvc ++.我的计划是简单地将崩溃记录到各个用户的计算机上的文件中,然后在达到一定大小后上载崩溃日志.
我正试图在3d pointcloud上自动检测旋转轴.
换句话说,如果我采用一个小的3d点云,选择一个单一的旋转轴,并以不同的旋转角度制作几个点的副本,那么我得到一个更大的pointcloud.
我算法的输入是较大的pointcloud,所需的输出是单轴对称.最后,我将计算彼此旋转的点之间的对应关系.
较大的pointcloud的大小约为100K点,旋转副本的数量是未知的.
在我的情况下,旋转角度具有恒定的增量,但不一定跨越360度.例如,我可能有0,20,40,60.或者我可能有0,90,180,270.但我不会有0,13,78,212(或者如果我这样做,我不在乎检测它).
这似乎是一个计算机视觉问题,但我无法弄清楚如何精确地找到轴.输入通常非常干净,接近浮动精度.
我没有旋转/复制的原始较小的pointcloud来制作更大的pointcloud.我知道数据是合成的,噪音很小(通常是另一个程序的输出).
我们不能轻易地计算较小云中可能的点数,因为不幸的是,沿着轴线,点不会重复.如果我们知道轴上有哪些点,那么我们可以提出可能的因素,但是我们已经解决了这个问题.
-
谢谢大家的建议.看起来我的最终算法将尝试使用k-nn度量来提出匹配点的集合.每个集团都会给出一个轴.然后,我可以使用RANSAC将轴拟合到所有集团的结果中.
所以我最近开始研究一个大型软件项目,该项目使用llvm-gcc编译器连接OSX上的几个静态和动态库.
我遇到了严重的问题.具体来说,非常简单的代码会崩溃.例如,在我的主项目中,以下代码将崩溃:
{
std::vector< unsigned int > testvec;
testvec.resize( 1 );
testvec[0] = 0;
}
Run Code Online (Sandbox Code Playgroud)
当退出作用域时,它会在std :: vector <unsigned int>析构函数内部崩溃,抛出一个SIGABRT,并说尚未分配正在释放的内存.特别:
malloc: *** error for object 0x135e8fc30: pointer being freed was not allocated
*** set a breakpoint in malloc_error_break to debug
Run Code Online (Sandbox Code Playgroud)
这只发生在发布版本中 - 调试版本运行正常.
我最好的猜测是其中一个外部库链接到另一个使用不同内部内存布局的STL版本,所以它试图解除大小或类似的东西.
我在我链接的所有库上运行nm,其中有几个有外部stl符号(具体来说,std :: vector <unsigned int>析构函数在nm输出中标记为S).但我无法弄清楚哪一个是罪魁祸首.
有没有办法检查.a或dylib文件以跟踪哪些文件链接到不同版本的STL?
[编辑]
这看起来像两个静态库中描述的情况的真实示例,两个不同的向量实现,链接器会做什么? 事实证明,链接器做了可怕的,可怕的事情.. :)
我正在尝试创建一个用于Windows/MSVC的c ++库.
我的问题是,似乎为了正确链接,我需要分发一堆不同的版本,链接到不同版本的MSVC的c ++运行时 - 单线程和多线程,调试和发布,不同的编译器版本,各种其他安全性和其他选择.
我喜欢分发两个,32位和64位.
我的想法是为我的所有STL类型使用不同的新运算符(比如,mynew)和自定义分配器.创建lib时,/ nodefaultlib.然后,当从父项目链接时,要求他们将mynew转换为new,并将我的stl分配器转换为标准的(或者他们选择的一个).我想我需要删除,以及其他一些功能.当然,我会提供一个示例的thunking实现与库,但这将有希望为每个人节省很多头痛.
这可能吗?有没有人试过这个?是否有关于Windows/MSVC上的库创建/分发的最佳实践?
我有一个3D建模应用程序.现在我正在双面绘制网格,但是当对象关闭时我想切换到单面.
如果多边形网格是闭合的(没有边界边缘/完全周期性),我似乎应该始终能够确定对象当前是否被翻转,并自动更正.
被翻转意味着我的法线指向对象而不是对象.翻转是我的缠绕规则与当前正面设置不匹配的结果,但我直接从几何图形计算法线,因此查看法线是一种检测它的简单方法.
我想到的一件事就是拿走边界框,找到最高点,看看它的正常点是向上还是向下 - 如果它向下,那么对象就会被翻转.
但似乎这个解决方案可能容易出现退化几何或浮点错误,因为我只看一个点.我想我可以得到所有6个轴对齐的范围,但这似乎是一个稍好的kludge,而不是一个合适的解决方案.
有一种强大而简单的方法吗?强大而坚硬也会起作用.. :)
我正在尝试实现几何模板引擎.其中一个部分是采用原型多边形网格,并将实例化与较大对象中的某些点对齐.
因此,问题在于:给定多边形网格中某些(可能是全部)顶点的三维点位置,找到一个缩放旋转,最小化变换顶点和给定点位置之间的差异.如果有帮助的话,我还有一个可以保持固定的中心点.顶点和3d位置之间的对应关系是固定的.
我认为这可以通过求解变换矩阵的系数来完成,但我有点不确定如何构建系统来解决.
一个例子是立方体.原型将是以原点为中心的单位立方体,具有vert索引:
4----5
|\ \
| 6----7
| | |
0 | 1 |
\| |
2----3
Run Code Online (Sandbox Code Playgroud)
要适合的vert位置的示例:
因此,考虑到原型和那些点,我如何找到单个比例因子,以及关于x,y和z的旋转,它们将最小化顶点和那些位置之间的距离?最好将该方法推广到任意网格,而不仅仅是一个立方体.