我有两个位图,我想只在像素位于由四个角(四边形)定义的区域内时才将像素从A复制到B. 位图A和B具有相同的大小,并且四边形被定义为图像的像素空间中的四个{x,y}坐标.
最糟糕的情况我可以测试每个像素的中心对着四边形,看看像素的中心是否在四边形内,但这非常慢.什么是更好的算法?
我想知道它之间的区别是什么javascript:;,javascript:void(0);如果我在hrefattribure中使用它们a(链接)
<a href="javascript:;" onclick="DoSomething();">Link</a>
<a href="javascript:void(0);" onclick="DoSomething();">Link</a>
Run Code Online (Sandbox Code Playgroud)
我看到它们在所有浏览器上表现相同,但技术上有什么区别?
此致,Magdy
有没有办法为实例变量创建别名(不是谈论db别名属性),而不是将其分配给另一个实例var?
例如:
@imavar
alias_attribute(@hesavar, @imavar)
Run Code Online (Sandbox Code Playgroud) 我需要在GetHashCode中为BitArray生成快速哈希码.我有一个字典,其中键是BitArrays,所有BitArrays长度相同.
有没有人知道从可变位数生成良好哈希的快速方法,如在这种情况下?
更新:
我最初采用的方法是直接通过反射访问内部int数组(速度比这种情况下的封装更重要),然后对这些值进行异或.XOR方法似乎运行良好,即在"字典"中搜索时,我的"等于"方法不会过度调用:
public int GetHashCode(BitArray array)
{
int hash = 0;
foreach (int value in array.GetInternalValues())
{
hash ^= value;
}
return hash;
}
Run Code Online (Sandbox Code Playgroud)
但是,Mark Byers建议并在StackOverflow其他地方看到的方法稍好一些(对于我的测试数据,XOR为16570等于呼叫,而对于XOR为16608).请注意,此方法修复了前一个错误,其中超出位数组末尾的位可能会影响散列值.如果位数组的长度减少,则可能发生这种情况.
public int GetHashCode(BitArray array)
{
UInt32 hash = 17;
int bitsRemaining = array.Length;
foreach (int value in array.GetInternalValues())
{
UInt32 cleanValue = (UInt32)value;
if (bitsRemaining < 32)
{
//clear any bits that are beyond the end of the array
int bitsToWipe = 32 - bitsRemaining;
cleanValue <<= bitsToWipe;
cleanValue >>= bitsToWipe;
} …Run Code Online (Sandbox Code Playgroud) 我有一个对象列表,每个对象都有一个bool ShouldRun()方法.
我正在迭代对象列表,并检查每个对象上的ShouldRun(),并在第一个上调用Run()返回true
foreach (child in Children)
{
if (child.ShouldRun())
{
child.Run();
break;
}
}
Run Code Online (Sandbox Code Playgroud)
我想并行执行此操作,因为评估shouldRun可能需要相当长的时间,并且让集合中的后续元素尽早开始评估是有利的.
但是,我无法想到一种满足这些条件的方法:
1只运行一个项目
2如果之前的项目为true,或者尚未完成评估,请不要运行以后的项目
3如果所有"早期"项目都返回false,并且中间项目返回true,则不要等待后面的项目完成评估,因为您知道它不能提前覆盖任何内容.
我想做一个并行的"where"linq查询来检索所有的项目,然后运行shouldRun()然后排序,但这会违反条件#3
想法?
背景资料:
该系统用于通用机器人AI系统.
一些较高优先级的任务可以由立即已知的传感器变量触发,例如:我摔倒,修复它!
其他任务可能是计算密集型的(从相机进行图像识别,并接近可见目标)
其他任务可能是数据库或远程驱动(从数据库中查找可能的目标位置列表,然后在那里导航以查看是否可以进入其中一个的可见范围)
一些任务本身具有子任务,这本质上是在一个任务的子集上递归地开始这个过程,并且孙子任务将通过链传递
我一直在阅读Alexandrescu的书,现代C++设计,我对他使用的技术印象深刻,所以我想在我的应用程序中添加Loki库.
然而,经过进一步的调查,我看到我已经在使用的提升提供了很多类似的功能(不是全部,但是,例如,我无法在boost中找到单例)
由于基于策略的设计和仿函数,我最感兴趣的是使用loki.
对我而言,boost和loki都有利有弊.我对loki的主要关注是糟糕的文档(图书馆不再与书籍联系在一起了)但在我看来,loki比某些领域的提升更强大,更灵活(我可能错了)
在选择使用boost或loki作为仿函数和策略之前,我想知道在现实生活中使用它们的人的意见.
有时在纸上看起来非常好但是当你真正使用它们时会有一些缺点:)
我写了一些代码来修改网页上的图像.适用于Firefox和Safari.但是试图让它与Internet Explorer一起工作让我很难过.什么是资源管理器中的"parentNode"?或者如何让它成功运作?
images = document.getElementsByTagName('img')
parms = {};
for (a=0;a < images.length;a++){
parent = images[a].parentNode; // <-- What to substitute for explorer?
parms[a] = {};
parms[a].bigsrc=parent.getAttribute("href");
parms[a].w_o = images[a].width;
parms[a].h_o = images[a].height;
parms[a].IsBig = false;
parms[a].loaded = false;
images[a].border=0;
parent.setAttribute("href","javascript:MakeBig('"+a+"')");
}
Run Code Online (Sandbox Code Playgroud) <html>
<head>
<title>Test</title>
<script type="text/javascript">
function showChar(e) {
if (e.keyCode != 16) {
alert(
"keyCode: " + e.keyCode + "\n"
+ "SHIFT key pressed: " + e.shiftKey + "\n"
);
}
}
</script>
</head>
<body onkeydown="showChar(event);">
<p>Press any character key, with or without holding down
the SHIFT key.<br /></p>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
如何在onkeydown事件处理程序方法中区分大写A和小写a?以上算法触发相同的keyCode值.我需要在按下onkeydown时检测大写字母.
注意:代码包含SHIFT键的例外.否则它不允许输入大写字母.顺便说一句,我需要使用onkeydown进行试验.
相关:C++私有指针"泄漏"?
根据Effective C++(第28项),"避免将句柄(引用,指针或迭代器)返回到对象内部.它增加了封装,帮助const成员函数执行const,并最小化悬空句柄的创建."
按值返回对象是我能想到避免返回句柄的唯一方法.这对我来说建议我应尽可能多地返回私有对象内部.
但是,要按值返回对象,这需要复制构造函数,这违反了"DISALLOW_COPY_AND_ASSIGN"运算符的Google C++样式指南.
作为一个C++新手,除非我遗漏了什么,否则我发现这两个建议相互冲突.
所以我的问题是:是否没有银弹允许有效的参考返回到不易受悬空指针影响的对象内部?const引用的返回是否与它一样好?另外,我是不是应该经常使用私有对象字段的指针?选择何时按值或按指针存储对象的私有实例字段的一般经验法则是什么?
(编辑)为了澄清,迈耶斯的例子悬空指针代码:
class Rectangle {
public:
const Point& upperLeft() const { return pData->ulhc; }
const Point& lowerRight() const { return pData->lrhc; }
...
};
class GUIObject { ... };
const Rectangle boundingBox(const GUIObject& obj);
Run Code Online (Sandbox Code Playgroud)
如果客户端使用以下代码创建函数:
GUIObject *pgo; // point to some GUIObject
const Point *pUpperLeft = &(boundingBox(*pgo).upperLeft());
Run Code Online (Sandbox Code Playgroud)
"对boundingBox的调用将返回一个新的,临时的Rectangle对象[(在这里称为temp.)]然后将在temp上调用upperLeft,并且该调用将返回对temp的内部部分的引用,特别是对其中一个构成它的点...在语句结束时,boundingBox的返回值temp将被销毁,这将间接导致temp点的破坏.反过来,这将使pUpperLeft指向不再是一个对象存在".Meyers,Effective C++(Item 28)
我认为他建议按值返回Point以避免这种情况:
const Point upperLeft() const { return pData->ulhc; }
Run Code Online (Sandbox Code Playgroud)