C 实现射线检测多边形碰撞

要用射线去检测碰撞,之前我们先从一个点开始。如果能够判断一个点是否和多边形碰撞,那么就可以轻易的扩展到,线和多边形,多边形和多边形的碰撞。点与多边形的碰撞是基于这个实现,PNPOLY – Point Inclusion in Polygon Test。

C++ 标准库中的那些大坑

变量初始化

这是使用 C++11 codecvt 时遇到的一个坑,转换编码时,mbstate_t 这个中间状态变量,必须初始化为0,否则运行出错,即:

// 不可以!
mbstate_t mbst;
// 这样可以
mbstate mbst = {0};
// 这样也行
mbstate mbst = mbstate_t();
// 不可以!
mbstate_t mbst;
// 这样可以
mbstate mbst = {0};
// 这样也行
mbstate mbst = mbstate_t();

这是第一个坑,并不算太坑,还比较容易调试和发现,也怪自己大意了。

C++模板特化与偏特化

前言

说到C++模板,这个已经不是什么新东西了,自己在实际开发中也用过;对于C++模板特化和偏特化,对于别人来说,已经不是什么新东西了,但是对于我来说,的确是我的盲区,那天在群里讨论这个问题,自己对于这部分确实没有掌握,又联想到在《STL源码剖析》一书中,对于此也是有着介绍。所以,今天就对此进行详细的总结,以备后忘。

C++类模板的三种特化

说起C++的模板及模板特化, 相信很多人都很熟悉 ,但是说到模板特化的几种类型,相信了解的人就不是很多。我这里归纳了针对一个模板参数的类模板特化的几种类型, 一是特化为绝对类型; 二是特化为引用,指针类型;三是特化为另外一个类模板。

C++11 随机数库

简介

之前,C++中的随机数生成都依赖于一个简单的rand函数。这个函数产生一定范围内的一个均匀随机整数。如果需要其他随机分布或者其他范围的随机数,就需要根据rand函数产生的随机数进行再加工,不过这时,就容易引入非随机性了。

462 字节 C 代码实现雅虎 logo ACSII 动画

#include <stdio.h>
#include <math.h>
#include <unistd.h>
 
int c,p,i,j,n,F=40,k,m;
float a,x,y,S=0,V=0;
 
void main()
{
  for(;F--;usleep(50000),F?puts("x1b[25A"):0)
  {
    for(S+=V+=(1-S)/10-V/4,j=0;j<72;j+=3,putchar(10))
    {
      for(i=0;x=S*(i-27),i++<73;putchar(c[" ''".$u$"]))
      {
        for(c=0,n=3;n--;)
        {
          for(y=S*(j+n-36),k=0,c^=(136*x*x+84*y*y<92033)<<n,p=6,m=0;m<8;
            k++["<[]O=IKNAL;KNRbF8EbGEROQ@BSX""XtG!#t3!^"]/1.16-68>x*cos(a)+y*sin(a)?k=p,p="<AFJPTX"[m++]-50:k==p?c^=1<<n,m=8:0)
          {
            a=(k["O:85!fI,wfO8!yZfO8!f*hXK3&fO;:O;#hP;"i[by asloane"]-79)/14.64;
          }
        }
      }
    }
  }
  return;
}

运行后,你将会看到:

yahoo

它是一个 20fps、抗锯齿的 Yahoo! logo ASCII 动画。如果你想自己弄清楚它是如何工作的,那么可以忽略下面的内容。否则,请往下读。

狼与哈士奇

狼是自然界中真正的掠食者,而哈士奇不过是人类的玩物。两者长得确实很像,就如同 IT 界的 Programmer 和 Coder。如果用狼和哈士奇来隐喻这两种职业,Programmer 无疑是软件业真正的狼。

软件项目免坑指南

“谁也无法改变现状,唯有无数程序员血洒大地,才能使项目重建天日。”这一点也不夸张,软件项目做烂了就是个坑,参与者也不过是填坑的。就像是在魔兽世界战场遇到国家队一样,你赢也赢不了,出也出不去。

链家理房通:正确的产品,难看的吃相

说起理房通,可能很多人都不知道这到底是一个什么样的产品。但在2015年末,随着链家董事长左晖在集团年会上的讲话一夜之间传遍业内之后,越来越多的人开始关注到这个由链家一手孵化出来、左晖口中的『这就是我们要做的房地产金融』业务。

DataTable多线程写不安全

如下代码:

class test
{
    private DataTable ftable;

    public test()
    {
        ftable = new DataTable();

        DataColumn col = new DataColumn("COL_1", typeof(int));
        ftable.Columns.Add(col);
        col = new DataColumn("COL_2", typeof(int));
        ftable.Columns.Add(col);

        for (int i = 1; i < 100; i++)
        {
            DataRow row = ftable.NewRow();
            row["COL_1"] = i;
            row["COL_2"] = i * 2;
            ftable.Rows.Add(row);
        }
    }

    public void AddColTest()
    {
        DataColumn col = new DataColumn("COL_Test", typeof(int));
        ftable.Columns.Add(col);

        Parallel.For(0, ftable.Rows.Count, (index) =>
            {
                Thread.Sleep(500);

                DataRow row = ftable.Rows[index];
                row["COL_Test"] = Convert.ToInt32(row["COL_1"]) + Convert.ToInt32(row["COL_2"]);
            });
    }

    public void ShowTable()
    {
        for(int index = 0; index < ftable.Rows.Count; ++index)
        {
            DataRow row = ftable.Rows[index];
            Console.WriteLine(String.Format("{0} \t\t {1} \t\t {2}", row["COL_1"], row["COL_2"], row["COL_Test"]));
        }
    }
}

class Program
{
    static void Main(string[] args)
    {
        test t = new test();
        t.AddColTest();

        t.ShowTable();
        Console.ReadKey();
    }
}

我本来以为虽然DataTable不是线程安全的… 但是我并没有对任何一个数据做增删…我只是修改了现有单元格的值…理应不会出现任何问题…DataTable应该是已经分配好的内存…