我正在寻找一种方法来连接2D线段.线段由两个矢量点组成,线段的起点和线段的终点.
我想加入看起来应该形成相同直线的线段,我不想加入线段,如果它们的方向完全不同,但碰巧有2个点彼此靠近.我将要使用的系统是一个计算机视觉系统,因此获得的线段不会是完美的,即方向可能稍微偏离,段可能不是全长等
我认为以下3个示例涵盖了我想要连接在一起的线段:

谢谢
我现在有一个AR标记检测系统,它检测场景中的标记,并为场景中的每个标记提供摄像机的变换矩阵.
假设我找到了2个标记.我试图找到旋转矩阵,我将不得不应用于其中一个标记,以使其与另一个标记的方向相匹配.
我认为它应该与计算一个标记到另一个标记的变换矩阵并分解变换以获得x,y,z euler旋转矩阵相同,但我似乎无法使其工作.我正在使用C#和XNA.
在代码中:
Matrix marker1 = markerTransforms[0];
Matrix marker2 = markerTransforms[1];
Matrix relativeTransform = Matrix.Invert(marker1) * marker2;
Quaternion rotation;
Vector3 scale;
Vector3 translation;
relativeTransform.Decompose(out scale, out rotation, out translation);
Matrix rotationMatrix = Matrix.CreateFromQuaternion(rotation);
Run Code Online (Sandbox Code Playgroud)
以上情况似乎不起作用.
另一个问题是如何从旋转矩阵中提取出x,y,z euler旋转?
编辑:
我发现了一个函数将四元数转换为符合x,y,z顺序的euler:http://forums.create.msdn.com/forums/p/4574/23763.aspx
将此应用于我的代码我得到以下结果:

实际旋转应为:x:0 y:0 z:-0.52
我还注意到y和z的变化很大,取决于我如何定位相机.
我从标记检测器获得的两个变换矩阵包含相机相对于其中一个标记的方向和平移,如下所述:http://www.hitl.washington.edu/artoolkit/documentation/tutorialcamera.htm 我已转换它们是XNA格式,我知道它们可以正常工作,因为我可以在屏幕上绘制角落,它与相机所看到的相匹配.
我刚刚安装了VS2010以进行一些XNA开发,我注意到,日常使用Eclipse,似乎缺少一个非常有用的功能.当我开始从另一个名称空间键入类名时,intellisense不会显示它,因此我无法自动完成.我必须输入全名,用光标悬停在键入的类名上,然后单击出现的菜单以便添加using指令.
有没有办法在Eclipse中获得类似的行为,它在当前项目中显示所有类名,并在自动完成时自动添加导入?
我正在尝试开始使用命名管道,因为我将来需要将它们用于我的项目。
目前我有一个 C++ 服务器,它会等待客户端连接并发送测试消息。我大致是按照这个教程开始的。相关代码如下:
#define MESSAGE L"TestMessage"
HANDLE hnamedPipe = INVALID_HANDLE_VALUE;
hnamedPipe = CreateNamedPipe(
L"\\\\.\\pipe\\testpipe",
PIPE_ACCESS_DUPLEX,
PIPE_TYPE_MESSAGE|
PIPE_READMODE_MESSAGE|
PIPE_WAIT,
PIPE_UNLIMITED_INSTANCES,
1024,
1024,
NMPWAIT_USE_DEFAULT_WAIT,
NULL);
if(hnamedPipe == INVALID_HANDLE_VALUE)
{
cout << "Failed" << endl;
}
while(true)
{
cout<< "Waiting for client"<< endl;
if(!ConnectNamedPipe(hnamedPipe,NULL))
{
if(ERROR_PIPE_CONNECTED != GetLastError())
{
cout << "FAIL"<< endl;
}
}
cout<<"Connected!"<<endl;
//Send over the message
wchar_t chResponse[] = MESSAGE;
DWORD cbResponse,cbWritten;
cbResponse = sizeof(chResponse);
if(!WriteFile(
hnamedPipe,
chResponse,
cbResponse,
&cbWritten,
NULL))
{
wprintf(L"failiure w/err 0x%08lx\n",GetLastError);
} …Run Code Online (Sandbox Code Playgroud) 我在3D空间中有两个正方形.我想找到它们之间的x,y,z角度.我开始找到两个正方形的法线向量,我试图弄清楚如何获得它们之间的角度.
我正在使用XNA(C#)Vector3对象.
我计算了法线向量如下:
Vector3 normal1 = (Vector3.Cross(sq1.corners[0] - sq1.corners[1], sq1.corners[0] - sq1.corners[2]));
Vector3 normal2 = (Vector3.Cross(sq2.corners[0] - sq2.corners[1], sq2.corners[0] - sq2.corners[2]));
Run Code Online (Sandbox Code Playgroud)
我想找到将使normal1面向normal2的euler旋转
我一直在编写一些代码来创建一个字节数组,我将通过套接字发送到另一个进程.但是注意到我的byte []有些奇怪的行为.
最后的cout打印出99,但是看着我的代码,我找不到设置值的位置.我创建了一个大小为invoiceSize的char数组,它是一个常量.我没有设置值307200*3所以我不明白它是如何打印出一个值...
char tosend[sendingSize];
//Send over the frame
for(int i = 0; i < 307200; i++)
{
tosend[i * 3] = (byte)imCopy[i/640][i%640].red;
tosend[i * 3+1] = (byte)imCopy[i/640][i%640].green;
tosend[i * 3+2] = (byte)imCopy[i/640][i%640].blue;
}
char *bytePointer = tosend;
cout<<(int)tosend[307200* 3]<<endl;
Run Code Online (Sandbox Code Playgroud) c# ×4
math ×3
xna ×3
c++ ×2
2d ×1
arrays ×1
eclipse ×1
euler-angles ×1
intellisense ×1
ipc ×1
line ×1
named-pipes ×1
vector ×1
windows ×1