假设我有一个简单的二叉树节点类,如下所示:
public class BinaryTreeNode {
public String identifier = "";
public BinaryTreeNode parent = null;
public BinaryTreeNode left = null;
public BinaryTreeNode right = null;
public BinaryTreeNode(BinaryTreeNode parent, String identifier)
{
this.parent = parent; //passing null makes this the root node
this.identifier = identifier;
}
public boolean IsRoot() {
return parent == null;
}
}
Run Code Online (Sandbox Code Playgroud)
我如何添加一个能够以递归方式遍历任何大小树的方法,从左到右访问每个现有节点,而无需重新访问已遍历的节点?
这会有用吗?:
public void traverseFrom(BinaryTreeNode rootNode)
{
/* insert code dealing with this node here */
if(rootNode.left != null)
rootNode.left.traverseFrom(rootNode.left);
if(rootNode.right != null) …Run Code Online (Sandbox Code Playgroud) 起初,它似乎很明显......无论在哪里找到4个指数,每个面都会生成2个三角形,对吧?
含义如下:
v 1.000000 1.000000 0.000000
v -1.000000 1.000000 -0.000000
v 1.000000 -1.000000 0.000000
v -1.000000 -1.000000 -0.000000
f -4 -3 -2 -1
Run Code Online (Sandbox Code Playgroud)
......反过来,需要转换为:
v 1.000000 1.000000 0.000000
v -1.000000 1.000000 -0.000000
v 1.000000 -1.000000 0.000000
v -1.000000 -1.000000 -0.000000
f -4 -3 -2
f -2 -3 -1
Run Code Online (Sandbox Code Playgroud)
当然,这个特定的例子可以正确呈现.
但是,并非所有情况都像将面分割成两个面一样简单(其中第一个面包含原始面的前三个顶点,第二个面包含最后3个顶点,如上例所示).以下面的多维数据集为例:
v 0.000000 1.000000 1.000000
v 0.000000 0.000000 1.000000
v 1.000000 0.000000 1.000000
v 1.000000 1.000000 1.000000
v 0.000000 1.000000 0.000000
v 0.000000 0.000000 0.000000
v 1.000000 0.000000 0.000000
v 1.000000 …Run Code Online (Sandbox Code Playgroud) 我为zlib 1.2.7创建了一个新的解决方案,将其设置为静态库,添加了必要的头文件和源文件,./zlib/contrib/minizip并使其编译得很好.然后我将它与libpng(也作为一个静态库)链接,它也编译好.然后,我将libpng链接到我的图形引擎项目(也是一个静态库)......仍然没有错误.
但是一旦我将我的主项目链接到我的图形引擎,我就会收到几个关于crc32.obj,deflate.obj,inflate.obj,d3dxplane.obj,d3dxvec4.obj和其他zlib/directx相关模块的LNK2026错误.它告诉我它们来自我的图形引擎库,因此我决定通过添加/SAFESEH:NO相应项目的链接器标志来解决这个问题.
注意:我应该声明所有项目都设置为目标x86,而不是x64.
但问题是,现在我得到了:
warning LNK4044: unrecognized option '/SAFESEH'; ignored这导致我的主项目中出现了相同的LINK2026错误.
如果我打开visual studio命令提示符并键入LINK /?它,/SAFESEH则确认这是一个有效的链接器选项.我使用时得到相同的错误/SAFESEH (没有':NO'),如果我完全省略它,那么我的主项目就是拒绝构建.
这里发生了什么?我该如何解决这个问题?
这种链路聚合甚至可能吗?
在Windows机器上,有几个第三方应用程序利用绑定和负载平衡多个网络接口来提高吞吐量,例如Connectify Dispatcher.是否有可能为OSX开发这样的应用程序?是否已有任何第三方软件在OSX上执行此操作?我能找到的最接近的东西是IPNetRouterX,我没有用它来绑定USB和WiFi网络接口.
我也在OSX的终端中尝试了以下行:
sudo networksetup -createBond bond0 en1 en3
Run Code Online (Sandbox Code Playgroud)
...其中en1是我的WiFi接口,en3是我的USB网络接口,它只会导致:
** Error: The parameters were not valid.
Run Code Online (Sandbox Code Playgroud)
可能需要某种第二层"魔术胶"才能使其成为一种可能性......但主要是作为Windows程序员,我不确定Apple是否会喜欢允许这种级别的编程访问,考虑他们喜欢的专有权......
知道在这里可以做些什么吗?
使用C++,我有一个应用程序,它创建一个远程进程并向其中注入一个DLL.有没有办法让远程应用程序执行从DLL导出的函数,从创建它的应用程序?是否可以向该功能发送参数?请注意,我正试图远离在DllMain中做任何事情.
我需要弄清楚如何以编程方式从单独的应用程序的系统托盘图标中查找并选择上下文菜单项。我能想象实现这一点的唯一方法是使用 mouse_event() 和一些硬编码的 x/y 值,并将图标设置为始终显示。除了一般的硬编码的黑客使用之外,这里的问题是假设图标将保留其位置(这可能会在其他应用程序加载/卸载时中断)。我想知道是否有人知道任何其他方法来解决这个问题?
我试图找到一种方法,我可以采用二叉树类并遍历其节点,在每个节点上
执行X数量的内联操作,而不必一遍又一遍地重写相同的遍历代码。
我想如果Java允许函数指针,这对我来说会更容易弄清楚......
基本上,我需要的是以下内容:
public class BinaryTreeNode {
//...
public void inOrderTraversalFrom(BinaryTreeNode node, /* ??? */ actions) {
if(node.left != null)
inOrderTraversalFrom(node.left);
/* do something with "actions" here */
if(node.right != null)
inOrderTraversalFrom(node.right);
}
}
Run Code Online (Sandbox Code Playgroud)
...其中动作可以允许执行不同的方法,根据要在每个节点上执行的动作类型采用不同的参数集。
一个很好的例子是可以传递一个用于绘制这些节点的类,接受一个 Graphics 对象作为它的参数之一,而不是一个用于执行一些其他不需要 Graphics 的系列操作的类对象作为参数,而是一组完全不同的参数。
这怎么可能?执行此操作的最动态方式是什么?
我的项目能够捕获目标窗口的位图并将其转换为a IplImage,然后在a中显示该图像cvNamedWindow,进行进一步处理.
为了测试,我将图像加载到MSPaint中,如下所示:
然后允许用户单击并将鼠标拖动到图像内的任意数量的像素上以创建vector<cv::Scalar_<BYTE>>包含这些RGB颜色值的像素.
然后,在ColorRGBToHLS()这个数组的帮助下,然后通过hue从左到右排序这个数组,如下所示:
// PixelColor is just a cv::Scalar_<BYTE>
bool comparePixelColors( PixelColor& pc1, PixelColor& pc2 ) {
WORD h1 = 0, h2 = 0;
WORD s1 = 0, s2 = 0;
WORD l1 = 0, l2 = 0;
ColorRGBToHLS(RGB(pc1.val[2], pc1.val[1], pc1.val[0]), &h1, &l1, &s1);
ColorRGBToHLS(RGB(pc2.val[2], pc2.val[1], pc2.val[0]), &h2, &l2, &s2);
return ( h1 < h2 );
}
//..(elsewhere in code)
std::sort(m_colorRange.begin(), m_colorRange.end(), comparePixelColors);
Run Code Online (Sandbox Code Playgroud)
...然后以新的方式显示cvNamedWindow,看起来像:
现在,这里的想法是创建一个二进制阈值图像(或"掩码"),其中所选颜色范围变为白色,源图像的其余部分变为黑色...类似于 …
所以我正在阅读如何通过这个小博客教程为Lua创建和注册c ++类.
但是,尽管简单,信息丰富且易读,但它似乎是旧版本的Lua.
因此,某些功能/宏要么丢失,要么只有不同的签名.
在Lua C 5.2版中,以下代码是什么样的?
#include <lua.h>
#include <lualib.h>
#include <lauxlib.h>
#include <stringstream>
#include <string>
using namespace std;
// Just a useless test class
class MyClass
{
private:
int _X;
public:
MyClass(int x) : _X(x) {};
~MyClass() { Release() };
// Displays your number in a welcoming message box
void Hello()
{
stringstream ss;
ss << "Hello!" << endl << "Your number is: " << _X;
string s(ss.str());
MessageBoxA(NULL, s.c_str(), "MyClass", MB_ICONINFORMATION);
}
void Release() { …Run Code Online (Sandbox Code Playgroud) 我有一个监控CPU和GPU温度的外部应用程序......
我正在使用Lua和外来扩展来获取这些值(通过GetWindowText)并对这些值进行一些模式匹配,有效地从字符串中提取温度数字,默认情况下显示为CPU 67.875 °C......
但也许我对于LUA中的模式如何工作有错误的想法(因为它们看起来不像正则表达式)?
我使用的模式[%d]+[.%d+]*应该匹配0到100.0之间的任何数字,对吗?
奇怪的是,当值达到56.5度左右时,我得到了令人难以置信的奇怪输出(见链接).
为什么会这样?
如何以0到100之间的格式提取正确的浮点值(作为字符串)XYY.ZZZ,其中X不是可选的,Y是可选的,.除非Z存在,否则是可选的?
c++ ×4
java ×3
binary-tree ×2
function ×2
lua ×2
winapi ×2
windows ×2
c ×1
class ×1
click ×1
colors ×1
contextmenu ×1
dll ×1
generics ×1
graphics ×1
inject ×1
linker ×1
lua-patterns ×1
lwjgl ×1
macos ×1
methods ×1
networking ×1
opencv ×1
opengl ×1
pixel ×1
process ×1
system-tray ×1
tethering ×1
traversal ×1
visual-c++ ×1
wavefront ×1
wifi ×1