小编wco*_*ran的帖子

带有受保护字段的微妙C++继承错误

下面是访问实例的受保护字段x的一个微妙示例.B是A的子类,因此B类型的任何变量也是A类型.为什么B :: foo()可以访问b的x字段,而不是a的x字段?

class A {
protected:
  int x;
};

class B : public A {
protected:
  A *a;
  B *b;
public:
  void foo() {
    int u = x;     // OK : accessing inherited protected field x
    int v = b->x;  // OK : accessing b's protected field x
    int w = a->x;  // ERROR : accessing a's protected field x
  }
};
Run Code Online (Sandbox Code Playgroud)

这是我用g ++得到的错误

$ g++ -c A.cpp
A.cpp: In member function ‘void B::foo()’:
A.cpp:3: error: ‘int A::x’ is …
Run Code Online (Sandbox Code Playgroud)

c++ inheritance protected

42
推荐指数
3
解决办法
2万
查看次数

gitignore没有忽略文件

无论我放入什么,.gitignore我都无法得到git忽略UserInterfaceState.xcuserstate下面的文件:

$ git status
On branch master
Your branch is up-to-date with 'origin/master'.

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

    modified:   .gitignore
    modified:  CalFoo.xcodeproj/project.xcworkspace/xcuserdata/wcochran.xcuserdatad/UserInterfaceState.xcuserstate
Run Code Online (Sandbox Code Playgroud)

我正在使用/编辑此帖子中.gitignore列出的文件.我尝试了一切以匹配模式,包括确切的路径名:无济于事.CalFoo.xcodeproj/project.xcworkspace/xcuserdata/wcochran.xcuserdatad/UserInterfaceState.xcuserstate

这个特殊问题源于使用Xcode创建初始​​git repo并且之后添加.gitignore来自此处的文件的工作流程.从这个问题中可以找到忽略git中先前跟踪文件的更一般的答案(我想我在搜索中从未找到过这个帖子,因为它在标题中没有"gitignore").

git xcode gitignore

37
推荐指数
2
解决办法
2万
查看次数

Xcode中的iOS配置配置文件编号

无论如何要匹配Xcode的组织者或在线开发者网站中的配置文件与Xcode的代码签名首选项下给出的疯狂序列号/ ID号码?

在此输入图像描述

我想确保我使用正确的(Ad Hoc)配置文件构建我的应用程序 - Xcode给了我一个很长的ID(如上所示),但是在线开发者网站和列出我的配置文件的Xcode首选项"列出这个号码.

xcode ios ios-provisioning

14
推荐指数
2
解决办法
1万
查看次数

为什么Node的Object.create(foo)比新的Foo()慢得多?

我在JS中使用回溯编写了一个简单的数独求解器.为了"纯粹功能化",我的所有9x9益智数组都是不可变的,因此每当插入新数字时都会创建一个新数组.

版本1使用 new SudokuPuzzle

在第一个版本中,我使用new Puzzle(puzzle)克隆对象的方法:

function SudokuPuzzle(obj) {
   if (obj instanceof SudokuPuzzle) {
      this.grid = obj.grid.slice(0);  // copy array
   } // ...
}
Run Code Online (Sandbox Code Playgroud)

然后每当我更新数组时,我都会执行以下操作:

SudokuPuzzle.prototype.update = function(row, col, num) {
    var puzzle = new SudokuPuzzle(this); // clone puzzle
    puzzle.grid[row*9 + col] = num;      // mutate clone
    return puzzle;                       // return clone
}
Run Code Online (Sandbox Code Playgroud)

版本2使用 Object.create()

我编写了另一个版本,我使用的是另一个版本,Object.create()并且sudokuPuzzle我继承了一个基础对象来创建新的谜题.这是clone()方法:

sudokuPuzzle.clone = function() {
   var puzzle = Object.create(this); // create puzzle from sudokuPuzzle
   puzzle.grid = this.grid.slice(0); …
Run Code Online (Sandbox Code Playgroud)

javascript node.js

8
推荐指数
1
解决办法
202
查看次数

UIView带来SubviewToFront:确实*不*将视图带到前面

我正在实现一个简单的iOS纸牌游戏,允许用户以通常的方式拖动卡片.这些卡用UIView子类表示CardView.所有卡片视图都是兄弟姐妹,是子视图SolitaireView.以下代码片段尝试"将卡片放在前面",以便在拖动时它位于所有其他视图上方:

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
   UITouch *touch = [touches anyObject];
   if (touch.view.tag == CARD_TAG) {
      CardView *cardView = (CardView*) touch.view;
      ...
      [self bringSubviewToFront:cardView];
      ...
   }
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,卡片的z顺序在拖动过程中保持不变.在下面的图片中,我拖着国王.请注意它在左图像中的九个顶部是正确的,但在右图像中的两个(实际上在整个堆栈下)不正确:

在此输入图像描述 在此输入图像描述

我也试过改变layer.zPosition房产也无济于事.如何在拖动过程中将卡片视图置于正面?我很神秘.

uiview uitouch ios

7
推荐指数
1
解决办法
2万
查看次数

GLSL点内盒测试

下面是一个GLSL片段着色器,如果给定的纹理坐标位于框内,则输出纹素,否则输出颜色.这只是感觉愚蠢,必须有一种方法来做到这一点没有分支?

uniform sampler2D texUnit;

varying vec4 color;
varying vec2 texCoord;

void main() {
  vec4 texel = texture2D(texUnit, texCoord);
  if (any(lessThan(texCoord, vec2(0.0, 0.0))) ||
      any(greaterThan(texCoord, vec2(1.0, 1.0))))
    gl_FragColor = color;
  else
    gl_FragColor = texel;
}
Run Code Online (Sandbox Code Playgroud)

下面是没有分支的版本,但它仍然感觉笨拙."纹理坐标夹紧"的最佳实践是什么?

uniform sampler2D texUnit;

varying vec4 color;
varying vec4 labelColor;
varying vec2 texCoord;

void main() {
  vec4 texel = texture2D(texUnit, texCoord);
  bool outside = any(lessThan(texCoord, vec2(0.0, 0.0))) ||
                 any(greaterThan(texCoord, vec2(1.0, 1.0)));
  gl_FragColor = mix(texel*labelColor, color,
                     vec4(outside,outside,outside,outside));
}
Run Code Online (Sandbox Code Playgroud)

这是渲染结果

我将纹素夹在区域中,标签是 - 在这种情况下,纹理s&t坐标将介于0和1之间.否则,我使用棕色,而标签不是.

请注意,我还可以构建代码的分支版本,在不需要时执行纹理查找.这会比总是执行纹理查找的非分支版本更快吗?也许是时候进行一些测试......

opengl glsl

7
推荐指数
2
解决办法
3419
查看次数

如何在半整数像素中心栅格化OpenGL三角形

OpenGL像素/片段在概念上是以半整数像素为中心的1x1个正方形.OpenGL 4.5规范声明:

片段位于其左下角,位于整数网格坐标上.光栅化操作也指一个片段的中心,它从左下角偏移(1/2,1/2)(因此位于半整数坐标上).

光栅化器通常假设像素中心位于整数网格上.由于我试图实现正确的OpenGL三角形填充,我想知道以下程序是否合理.

让我们看一个带有剪裁坐标(-1,-1),(+ 1,-1),(0,+ 1)的三角形的简单情况,如下图所示(假设正投影,z = 0) ).假设我们有一个(小的5x5帧缓冲区),我们将三角形映射到via,glViewport(0,0,5,5)如右图所示,在设备坐标中产生三角形,顶点为(0,0),(5,0),(2.5,5).

像素以半整数为中心

如您所见,光栅化器应生成三角形内部的13个片段(图像中的阴影像素).请注意,片段中心位于半整数坐标上.要实现OpenGL规范,这就是结果需要的结果.

扫描线多边形填充将确定扫描线与三角形相交的x跨距,但扫描线为半整数y值,如下图所示:

三角形填充OpenGL

硬件/固件光栅化器将假设像素中心位于整数网格上,因为这是执行填充的最有效方式.在下图中,我将三角形的设备坐标移动了(-0.5,-0.5),将中心放在整数网格上:

在此输入图像描述

请注意,像素中心现在确实在整数网格上.在传递给片段着色器之前,这个光栅化器只会向每个片段中心添加(0.5,0.5).至少这是我的计划.

处理纹理坐标似乎是直截了当的.想象一下,我分配了纹理坐标(0,0),(1,0),(0.5,1),如下所示.左边的图像使用半整数像素中心(OpenGL方式),右边的图像使用整数像素中心(硬件方式).纹理坐标(任何附加的片段属性)最终都有相同的值 - 即,没有什么特别需要做的.

在此输入图像描述

我的方法看起来是否正确?

  • 将(-0.5,-0.5)添加到每个片段坐标,
  • 使用硬件高效填充,
  • 生成片段中心时,重新添加(0.5,0.5),和
  • 不要冒汗其他片段属性(他们只是锻炼).

opengl pixel rasterizing rasterize

6
推荐指数
0
解决办法
1718
查看次数

perl shasum vs bash shasum

以下bash和Perl脚本神秘地给出了不同的结果.为什么?

#!/bin/bash                                                                       
hash=`echo -n 'abcd' | /usr/bin/shasum -a 256`;
echo $hash;

#!/usr/bin/perl                                                                   
$hash = `echo -n 'abcd' | /usr/bin/shasum -a 256`;
print "$hash";
Run Code Online (Sandbox Code Playgroud)

bash脚本:

$ ./tst.sh
88d4266fd4e6338d13b845fcf289579d209c897823b9217da3e161936f031589 -
Run Code Online (Sandbox Code Playgroud)

Perl脚本:

$ ./tst.pl
61799467ee1ab1f607764ab36c061f09cfac2f9c554e13f4c7442e66cbab9403  -
Run Code Online (Sandbox Code Playgroud)

哎?

bash perl sha

6
推荐指数
2
解决办法
985
查看次数

将多个四条带转换为单个四边形条带

我想通过添加适当的退化四边形将下图中的五个四边形条带(下面指定为黑色索引)转换为单个四边形条带.增加的灰色指数似乎可以解决问题,但我想知道是否有更紧凑的方式. 在此输入图像描述

opengl mesh

5
推荐指数
1
解决办法
1022
查看次数

C++ 特征归约比简单循环慢

给定两个 3xK 矩阵,我希望计算逐列点积的平方平均值。这可以通过一个简单的循环来完成:

Eigen::Matrix<float,3,Eigen::Dynamic> L(3,K);
Eigen::Matrix<float,3,Eigen::Dynamic> P(3,K);

float distance = 0;
for (int q = 0; q < K; q++){
    const Eigen::Vector3f& line = L.col(q);
    const Eigen::Vector3f& point = P.col(q);
    const float d = line.dot(point);
    distance += d*d;
 }
 const float residual2 = distance / K;
Run Code Online (Sandbox Code Playgroud)

其性能优于 ( g++ -O3 -DNDEBUG) 更高级的缩减技术,例如:

 const float residual2 = (L.array() * P.array()).colwise().sum().square().mean();
 const float residual2 = L.cwiseProduct(P).array().colwise().sum().array().square().mean();
 const float residual2 = (L.transpose() * P).diagonal().array().square().mean();
Run Code Online (Sandbox Code Playgroud)

也许我在这里缺少一些东西。削减不是应该更快吗?

编辑:使用 K = 20。我执行上述 100*632*631 次,循环版本大约需要 1200 …

c++ linear-algebra eigen

5
推荐指数
0
解决办法
667
查看次数