小编did*_*erc的帖子

任意大小凸多边形碰撞检测算法

我正在研究小行星克隆.一切都是2D,用C++编写.

对于小行星,我正在生成随机的N边多边形.我保证他们是Convex.然后我旋转它们,让它们旋转速度,让它们飞过太空.这一切都有效,非常漂亮.

对于碰撞,我使用的是我自己想到的算法.这可能是一个坏主意,如果推动,我可能会废弃整个事情,并在互联网上找到一个教程.

我已经编写并实现了所有内容,并且碰撞检测工作正常....大部分时间.当屏幕上明显发生碰撞时,它会随机失败,有时会在没有任何触摸时指示碰撞.我要么在某处扯下我的实现,要么我的算法很糟糕.由于我的实现的大小/范围(通过几个源文件),我不想打扰你,只是想让某人检查我的算法实际上是合理的.那时我可以继续寻找一个大虫子.

算法:

对于每个小行星,我有一个函数输出绘制小行星时每个顶点应该在哪里.对于每对相邻的顶点,我为它们所在的线生成公式, y=mx+b格式化.然后我从我的一个船顶点开始,测试该点以查看它是否在小行星内.我首先插入点的X坐标,然后将输出与实际Y值进行比较.这告诉我该点是在线之上还是之下.然后我对小行星的中心做同样的事情,以确定哪一半的线被认为是小行星的"内部".然后我重复每对顶点.如果我找到一条线,我的点与小行星的中心不在同一侧,我知道没有碰撞,并且退出检测到该点.由于我的船上有3个点,我必须测试下一个点.如果所有3个点都提前退出,那么船上的任何一点都没有碰撞,我们就完成了.如果由小行星组成的线在所有侧面上绑定任何点,则它位于小行星内部,并设置碰撞标志.

我用这种算法发现的两个问题是:

  1. 它不适用于凹多边形,并且
  2. 在Slope未定义的Edge情况下存在问题.

我已经确保所有多边形都是凸面的,并且已经编写了代码来处理未定义的斜率问题(NAN如果我们除以0,则应该双重返回,因此很容易测试它).

那么,这应该有用吗?

c++ algorithm 2d collision-detection

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

可以从程序员的角度实现EGL吗?

EGL 看起来像是有史以来记录最差的 Khronos 项目,我确实找不到有关该项目的任何具体信息,但它看起来很有前途,最后有一个 GLUT/FreeGlut 的标准化替代方案。

我的观点是,假设我想要在 linux 桌面上的窗口中或没有窗口(没有装饰)的应用程序中使用 EGL 上下文,作为程序员,我应该向谁咨询以获得该 EGL 上下文?例如,如果我使用 QT,那么 QT 是否应该实现 EGL?奥格?我?

opengl freeglut egl

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

图形时间轴创建用于分析多线程C++程序的软件API

我正在构建一个高性能的多线程程序.一些函数的持续时间和执行的重叠计数很多,我希望以某种方式产生一种视觉时间轴图,显示函数何时开始及其持续时间.我希望有类似于NVIDIA分析器的图表.使用该boost::chrono包我已经收集了时间表,但找不到任何用于绘制它们的软件或API.有人知道吗?

问候

丹尼尔

c++ multithreading profiling

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

重写一个小的 execve shellcode

浏览http://hackoftheday.securitytube.net/2013/04/demystifying-execve-shellcode-stack.html

execve我理解了调用并试图重写它的nasm 程序。

一些背景信息:

int execve(const char *filename, char *const argv[], char *const envp[]);
Run Code Online (Sandbox Code Playgroud)

因此,eax = 11( 的函数调用号execve),ebx应该指向char* filenameecx应该指向argv[](这将与第一个参数相同,ebx因为第一个参数是其*filename本身,例如在本例中为“/bin/sh”),并且edx将指向envp[]null在本例中)。

原始nasm代码:

global _start

section .text
_start:

xor eax, eax
push eax

; PUSH //bin/sh in reverse i.e. hs/nib//

push 0x68732f6e
push 0x69622f2f

mov ebx, esp

push eax
mov edx, esp

push ebx
mov ecx, esp

mov al, …
Run Code Online (Sandbox Code Playgroud)

c++ assembly nasm execve shellcode

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

如果我添加空格,为什么这个Haskell代码变得无效?

对不起,可能是一个菜鸟问题.

我明白了:

Prelude> all (\x -> x==1) ([n | n <- [1..20]])
False
Prelude> all (\x -> x == 1) ([n | n <- [1..20]])

<interactive>:17:44:
    parse error (possibly incorrect indentation or mismatched brackets)
Prelude> 
Run Code Online (Sandbox Code Playgroud)

x==1工作,但如果我改变x == 1它没有.但那是为什么呢?例如,1 == 1似乎很好地工作.

编译器版本:

$ ghci --version
The Glorious Glasgow Haskell Compilation System, version 7.6.3
Run Code Online (Sandbox Code Playgroud)

添加了证明截图; 很难看到,但你可以看到输入行不包含任何奇怪的东西.

在此输入图像描述

syntax haskell sublimetext sublimetext2

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

OCaml中的递归函数引用?

今天我们在SML中学到了"打结",你有类似的东西

val tempFunc = ref (fn k:int => true);
fun even x = if x = 0 then true else !tempFunc(x-1);
fun odd x = if x = 0 then false else even(x-1);
tempFunc := odd;
Run Code Online (Sandbox Code Playgroud)

而我正在使用类似的ocaml,但我只是在做同样的事情.我发现的最接近的是

let tempFunc {contents =x}=x;;
Run Code Online (Sandbox Code Playgroud)

但我真的不明白,以及如何将tempFunc绑定到另一个函数.任何帮助表示赞赏!

ocaml reference function sml

4
推荐指数
1
解决办法
359
查看次数

Java中的运行时与编译时内存分配

我对java中的内存分配是在运行时还是在编译时感到困惑。

例如:

class Test{
  int a;
  public Test(){
    a=10;
  }
};

// somewhere else
Test t = new Test();
Run Code Online (Sandbox Code Playgroud)

a在运行时分配还是在编译时分配?如果在编译时,java如何在直接获取已编译.class文件的VM上运行?

也:

  • 什么时候a赋值10

  • 参考变量如何工作t

谢谢。

java allocation

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

OCaml优化技术

我是OCaml的新手(在Haskell中有一些先验知识).我想说服自己采用OCaml.因此,我试图比较C和OCaml之间的性能.我写了以下天真的蒙特卡罗Pi-finder:

C版

#include <stdio.h>
#include <stdlib.h>

int main(int argc, const char * argv[]) {

    const int N = 10000000;
    const int M = 10000000;

    int count = 0;
    for (int i = 0; i < N; i++) {
        double x = (double)(random() % (2 * M + 1) - M) / (double)(M);
        double y = (double)(random() % (2 * M + 1) - M) / (double)(M);
        if (x * x + y * y <= 1) {
            count++;
        }
    } …
Run Code Online (Sandbox Code Playgroud)

optimization performance ocaml functional-programming

3
推荐指数
1
解决办法
600
查看次数

返回满足条件的映射中第一个元素的索引的函数

就像标题所说的那样,我正在寻找Clojure中的一个函数,它返回一个映射中第一个元素的索引以满足条件,我知道该怎么做,但是如果API中已有的东西我想要给我们.

例:

(strange-fn #(even? %) '(1 3 5 7 9 4)) 
=> 5
Run Code Online (Sandbox Code Playgroud)

functional-programming clojure

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

重载运算符的返回值

如果这是一个非常基本的问题,我很抱歉,我对C++很陌生.我正在尝试为它定义自己的向量类和迭代器.但是,每当我重载操作符时,返回的值始终是一个地址.

例如,以下代码0x7fb6dbc000e0 0x7fb6dbc000e0在我想要打印时打印1 0

由于我一直在搞乱语法一段时间,一些运算符看起来有点不同,这只是为了让你看到我尝试过的一些东西.

test.cc

#include <iostream>
#include "TwoWayVector.cc"
int main(){
    TwoWayVector<int> numbers;
    numbers.push_back(3);
    numbers.push_back(2);
        TwoWayVectorIterator<int>* beginning = numbers.begin();
    TwoWayVectorIterator<int>* beginning2 = numbers.begin();
    cout << beginning==beginning2;
    cout << beginning != beginning2;
    cout << endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)

TwoWayVector.cc

using namespace std;
#include "TwoWayVectorIterator.cc"
template <class T> class TwoWayVector{
public:

T* data;
int capacity;
int nextFree;

TwoWayVector(){
    capacity = 10;
    nextFree = 0;
    data = new T[capacity];
}

~TwoWayVector(){
    delete data;
}

T& operator[](const int index){
    if( …
Run Code Online (Sandbox Code Playgroud)

c++ templates pointers iterator reference

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