我正在开发一个matlab程序,其中我使用多边形(凹面或凸面).我需要在多边形上使用imdilate或imerode等图像处理功能.为此,我应该将我的多边形转换为图像.我想知道是否有一种方法可以直接在二进制矩阵中绘制多边形(1为前景,0为背景)?
目前,我使用'getframe',然后'frame2im',然后使用'im2bw'函数来执行此操作.但它的缺点是我无法控制最终图像(=矩阵)的大小(即,将帧转换为图像时图像的大小,以像素为单位),因为matlab不会以像素为单位显示其图形(?).因此,每当有人在绘图上"放大"或"缩小"时,生成的矩阵(=图像)就会不同.
我的代码:
Polygon = [ 15 45 33 30 40 23 ; 9 9 24 15 13 13]';
figure(1); clf; patch(Polygon(:,1),Polygon(:,2),'black');
axis off
%convert the plot to binary image
frame = getframe(gca);
im =frame2im(frame);
level = graythresh(im);
bw = ~im2bw(im,level);
%draw the resulting image
imtool(bw)
%dilate the image
SE = strel('square',5);
bw2 = imdilate(bw,SE);
%draw the dilated image
imtool(bw2)
Run Code Online (Sandbox Code Playgroud) 您可能知道,Fortran是一种科学计算语言.然而,最着名的科学计算高级语言的核心是用C而不是Fortran编写的.为什么?
使用多边形通常很受欢迎,它们的顶点在向量(2*1或1*2矩阵)中按CW或CCW排序.但是,如何在向量中描述带孔的多边形?
我将对这些多边形应用各种过程,所以我想要一种表示我可以轻松或有效地工作的方法.(即如何在我的程序中声明那种多边形以便简化我的算法?)
多边形是2D,我在MATLAB中编程.
编辑1:我将计算这些多边形的可见性图(有或没有孔).
我在MSDN(这里)中发现以下代码似乎是错误的(编译时错误).不是吗?
delegate void D(int x);
class C
{
public static void M1(int i) {...}
public void M2(int i) {...}
}
class Test
{
static void Main() {
D cd1 = new D(C.M1); // static method
Test t = new C(); // <---- WRONG-------
D cd2 = new D(t.M2); // instance method
D cd3 = new D(cd2); // another delegate
}
}
Run Code Online (Sandbox Code Playgroud)
考虑这一行:
Test t = new C();
Run Code Online (Sandbox Code Playgroud)
C类不是从Test类派生的,因此这个赋值不会编译.我在这里遗漏了一些东西(我在文章中没有考虑过一些假设吗?)
即使C类派生自Test,以下行也会出错:
D cd2 = new D(t.M2);
Run Code Online (Sandbox Code Playgroud)
不是吗?
我有三个向量V1,V2和V3.它们的起点是轴的起源.当我从V1逆时针移动到V2时,如何确定V3是否介于V1和V2之间?
alt text http://www.freeimagehosting.net/uploads/1448ea8896.jpg
无法通过获取角度和评估这些条件(伪代码)来完成:
if angle(V3) > angle(V1) && angle(V3) < angle(V2)
printf("V3 is between V1 and V2")
else
printf("out of the interval")
Run Code Online (Sandbox Code Playgroud)
为了看到它的缺陷,假设该angle函数给出了[-pi pi]范围内的角度.因此,如果角度(V1)= 120(度),角度(V2)= -130,角度(V3)= 150,那么答案(根据上面的代码)是"超出间隔",但如果你四处走动逆时针从V1到V2,它们介于它们之间.
您可能建议将2*pi添加到角度(V2)或类似的东西,但我已经尝试过这样的东西而且它不起作用.
我在MATLAB中编程.
编辑1:它是2D.
在哪种情况下我们应该使用"Latch until released"而不是"Switch to released"?
锁存直到释放 - 单击它时更改控制值并保留该值直到VI读取一次或释放鼠标按钮,具体取决于最后一个出现的那个.您无法为单选按钮控件选择此行为.
切换直到释放 - 单击它时更改控制值并保留新值,直到释放鼠标按钮.此时,控制恢复到其默认值,类似于门蜂鸣器的操作.VI读取控件的频率不会影响此行为.您无法为单选按钮控件选择此行为.
我想看看微软是否提供类似谷歌 BigQuery 的服务。
我想在大约 15GB 的数据库上运行一些查询,并且我希望该服务在云上。
PS:是的。我已经谷歌了,但没有找到类似的东西。
我正在为我的游戏添加重播功能.有了这个功能,我可以捕获用户对游戏的输入并稍后将它们反馈给Unity以重放游戏.但是VRStandardAssets.Utils.VRInput类的设计阻止了我模仿用户输入.
此类不提供任何公共方法,以便以编程方式触发其事件(例如OnClick或OnDoubleClick事件).所以我决定从它创建一个派生类,并编写我自己的公共方法来触发事件.此策略失败,因为VRInput的方法是私有的意思,我不能从派生类调用它们.
建议这类类提供受保护的虚拟void On [eventName](subclassOfEventArgs e)方法,以便为派生类提供一种使用覆盖来处理事件的方法,但是这个类没有它(为什么这么限制? ).我猜这是Unity的糟糕设计.这种糟糕的设计也使得编写单元/集成测试变得困难.
我在这里错过了什么吗?在重放游戏时,我还能做些什么来欺骗其他类认为他们正在处理VRInput类吗?
当我尝试将脚本附加到游戏对象时出现错误。
“EnemyBehaviour”缺少类属性“ExtensionOfNativeClass”!
还有一次,我得到:
无法添加脚本行为 CallbackExecutor。脚本需要从 Monobehaviour 派生!
我已经确定我的类来自 MonoBehaviour。
您可能知道,在许多情况下,需要标记矩阵的某些元素.例如,当我们有加权邻接矩阵,并且我们的图形没有完全连接时,我们必须标记一些元素以表明这些节点之间没有边缘.问题是如何做到这一点?将NaN或Inf放在矩阵中的元素上会更好吗?或其他东西(如-1)?