分类目录归档:未分类

一个AS3画任意虚线形状的类,很好用。

是不是很多朋友都在问如何用AS3绘制虚线?有了下面这个类,妈妈再也不用担心你了。

DashedLine(AS3画虚线的类)

用法:

先创建一个有graphics的显示对象,然后作为参数传给DashedLine类,并创建一个DashedLine实例。

接着你就可以像使用graphics一样来调用一些方法了:

* myDashedDrawing.moveTo(50, 50);
* myDashedDrawing.lineTo(100, 50);
* myDashedDrawing.curveTo(100, 100,200,200);

这里要注意一下,由于这个虚线实际上是一段一段的lineTo画出来的,所以如果你要用到填充。最好做两个shape层:一层直接填充,一层画虚线。

SVG图像格式path参数详解

悲催的发现as3版本的两个potracer都有问题,只好重新寻找其他办法来实现位图转矢量。

结果发现原版的poracer只能转eps、svg以及geojson等格式,所以只能再通过解析svg文件来转成as3的graphicsPath所需要的格式(geojson格式其实也可以转,不过他会把一条贝塞尔曲线转成8条直线,数据量肯定会大一些。所以还是从svg想办法。

转好的矢量在svg中都是通过path来存储绘图指令的,所以必须先要搞清楚他的含义。

这篇文章讲的非常详细了:

深度掌握SVG路径path的贝塞尔曲线指令

http://www.zhangxinxu.com/wordpress/2014/06/deep-understand-svg-path-bezier-curves-command/

命令 名称 参数
M moveto  移动到 (x y)+
Z closepath  关闭路径 (none)
L lineto  画线到 (x y)+
H horizontal lineto  水平线到 x+
V vertical lineto  垂直线到 y+
C curveto  三次贝塞尔曲线到 (x1 y1 x2 y2 x y)+
S smooth curveto  光滑三次贝塞尔曲线到 (x2 y2 x y)+
Q quadratic Bézier curveto  二次贝塞尔曲线到 (x1 y1 x y)+
T smooth quadratic Bézier curveto  光滑二次贝塞尔曲线到 (x y)+
A elliptical arc  椭圆弧 (rx ry x-axis-rotation large-arc-flag sweep-flag x y)+
R Catmull-Rom curveto*  Catmull-Rom曲线 x1 y1 (x y)+

 

恩,知道这些应该可以开始处理了。

RGB转HSB及HSB颜色模型说明

最近因为要做一个手机app,其中需要对色彩最一些识别。由于我们肉眼所看到的颜色用RGB无法区分(例如我们说的红色可能其RGB模型可能红色、绿色、蓝色都有),所以我们需要一个更容易描述的颜色模型。而hsb模型正好符合我们的要求。

HSB颜色模型可以理解为一个倒立的圆锥形,如下图所示

1353401545_7912    1353404459_6995

每一个颜色都由三个属性组成:

H: 色相

S:饱和度

B:明度

这个模型的好处在于,当我们描述一个红色的不同明暗时,它的色相值是不变的。

比方说我们有个红色,当光照条件不好的时候他表现为暗红,光照特别强时表现为浅红。但是他的色相是不会变化的,只有饱和度和明度发生变化。

所以,当我们对手机在不同光照条件下拍照时,用来判断颜色它的色相的变化是很小的。

RGB转HSB的公式

MAX=(R,G,B)中最大的值

MIN=(R,G,B)中最小的值

1.色相H的计算

如果R值是最大值 色相 H = 60 × ((G – B) ÷ (MAX – MIN))

如果G值是最大值 色相 H = 60 × ((B – R) ÷ (MAX – MIN)) +120

如果B值是最大值 色相 H = 60 × ((R – G) ÷ (MAX – MIN)) +240

如果RGB相等 色相 H = 0

注意:如果H为负值,则将其加上360

2.饱和度S的计算

S = (MAX – MIN) ÷ MAX

如果S的范围为0-255  S=S * 255

如果S的范围为0-100  S=S * 100

3.明度B的计算

明度 V = MAX

如果V的范围为0-255 V=V

如果V的范围为0-100 V=V/255 * 100

 

参考文章:

1.http://www.peko-step.com/tool/hsvrgb.html#ppick2

2.http://blog.csdn.net/viewcode/article/details/8203728

 

常用的Dos批处理编辑

1.设置变量

设置:set MY_DIR=C:\xxx

使用:%MY_DIR%\readme.txt      =>’C:\xxx\readme.txt’

 

2.批处理文件所在的目录

%~dp0  只能在批处理中使用,表示批处理文件所在的目录

 

3.当前的执行目录

%cd%  在哪个目录执行就表示哪个目录

比如在C:\下执行D:\aa.bat   %cd%为C:\

ruby字符串替换技巧

def replaceImg(str)
return str.gsub!(/\{\{img ([\S]*)?\}\}/,”<img src=\”img/\\1\” />”)
end

原始:”abcde{{img aa.jpg}}bbbb{{img bbb.jpg}}bb”

期望效果:abcde<img src=”img/aa.jpg” />bbbb<img src=”img/bbb.jpg” />bb

说明:其中\\1表示第一个括号中找到的内容

jondo动态ip

http://anonymous-proxy-servers.net/en/jondo.html

http://www.anonym-surfen.de/jondo.html

一个动态ip的东东

http://wenku.baidu.com/link?url=BV0AQaQPZKlkrTfNWXz0XKbArxOjAPEgVXmqT3sDBKynR7fE1Nxvub9yAfX2lbsx-UKxzWsK-W_TdI48lBvGzyeUsf44BHvE68Hk1U2j_Oe

来一篇文章学习

http://www.lirui.name/post/124.html

 

Linux下面可用的代理程序没有MS-Windows下面多。比较常用的Tor 的速度有时不尽如人意。

这里介绍一个新东东:JAP/JonDo

这是一个基于Java的代理程序。在选对了服务器的情况下速度是相当的。安装很简单。

首先在控制台下输入 java -version 并回车,查看自己的Java版本。如:

ray@ray-laptop:~$ java -version
java version “1.6.0_06”
Java(TM) SE Runtime Environment (build 1.6.0_06-b02)
Java HotSpot(TM) Client VM (build 10.0-b22, mixed mode, sharing)
ray@ray-laptop:~$

根据上面的信息到这个页面选择自己的版本。对于多数兄弟来说都是装了Java 1.2 / 1.3 / 1.4或者更高的版本。那么点击这里直接下载JAP.jar文件。没装Java的兄弟可以参考Ubuntu官方Wiki的介绍安装一下。

下载到任意位置,因为这个程序是不需要安装的。比如我把这个东东放在 /home/ray/ 文件夹下。那么运行这个程序的命令就是:

ray@ray-laptop:~$java -jar /home/ray/JAP.jar

简单回答几个问题后看到的界面如下:

124.JAP.JonDo.png

全部试验成功以后可以在桌面上创建一个程序启动器来解决每次都要使用命令行的问题。要注意的是界面上的那个Anonymity开关。开启意味着匿名,中间的那个指针意味着在线用户数量。用户越多您的尾巴就藏得越好。

浏览器的设置也很简单,把代理服务器设置成 127.0.0.1:4001 就可以了。在Firefox下面设置成这样:

124.JAP.firefox.png

在选择服务器的时候请注意,有些是免费的,有些是收费服务的。可以在配置文件里面把服务器选项里面的收费服务器去掉。这样就省得麻烦。因为经常会因为误选收费服务器而关闭匿名状态。

老是改Firefox的代理服务器配置是很麻烦的。建议通过扩展解决。原来的 Switch Proxy扩展在 Firefox 3 里面暂时无法使用。可以先用 Multiproxy Switch 顶一下。需要登录才能安装。

MS-Windows用户也可以在官方网站找到安装版本或者可以放在U盘上走的JonDo-Portable

 

 

 

ruby正则表达式中的编码问题

问题描述:

用ruby写一个抓网页分析的小程序,用match进行正则表达式匹配时,常常会遇到编码的问题。

比如一个简单的程序:

def getSomething
    uri = URI('http://blog.163.com/ma95221@126/blog/static/2482210220100159516893/')
    s=Net::HTTP.get(uri)
    r=r=s.match(/先建个\w\w\w/)
    if(r!=nil)
        puts "haha"
    else
        puts "false"
     end
end

运行时会报错: `match’: invalid byte sequence in UTF-8 (ArgumentError)

原因是加载的内容不是utf-8编码,通过下面两步可以解决

s.force_encoding("GBK")    #先将字符认为成GBK
s=s.encode("UTF-8)        #将字符按照UTF-8来编码

已知两条线段的四个顶点,求交点坐标AS3实现方法

(1)设定直线1的倾角a1,及其上一点(p1,q1);设定直线2的倾角a2,及其上一点(p2,q2)

(2)判断是否a1=a2
如果是,输出"两直线平行",程序结束
如果否,程序继续

(3)判断是否a1=90
如果是,计算x=p1,k2=tana2,y2=k2*x+q2-k2*p2,输出x,y2,程序结束
如果否,程序继续

(4)判断是否a2=90
如果是,计算x=p2,k1=tana1,y1=k1*x+q1-k1*p1,输出x,y1,程序结束
如果否,程序继续

(5)计算k1=tana1,k2=tana2
计算x=(q2-k2*p2-q1+k1p1)/(k1-k2)
y=k2*x+q2-k2*p2

输出x,y

程序结束
/**
     * 求两条线段的交点 ac与bd相交
     * @param a
     * @param b
     * @param c
     * @param d
     * @return
     */

    private function jiaodian(a:Point, b:Point, c:Point, d:Point):Point
    {
      var angle1:Number = Math.atan2((a.y - c.y), (a.x - c.x));
      var angle2:Number = Math.atan2((b.y - d.y), (b.x - d.x));
      var p1:Number = a.x;
      var q1:Number = a.y;
      var p2:Number = b.x;
      var q2:Number = b.y;
      var tmpX:Number;
      var tmpY:Number;
      var k1:Number;
      var k2:Number;
     
      trace(hd2jd(angle1), hd2jd(angle2));
      if (Math.abs(hd2jd(angle1)) == 90)
      {
        tmpX = p1;
        k2 = Math.tan(angle2);
        tmpY = k2 * tmpX + q2 - k2 * p2;
      }
      else if (Math.abs(hd2jd(angle2)) == 90)
      {
        tmpX = p2;
        k1 = Math.tan(angle1);
        tmpY = k1 * tmpX + q1 - k1 * p1;
      }
      else
      {
        k1 = Math.tan(angle1);
        k2 = Math.tan(angle2);
        tmpX = (q2 - k2 * p2 - q1 + k1 * p1) / (k1 - k2);
        tmpY = k2 * tmpX + q2 - k2 * p2;
      }
      return new Point(tmpX, tmpY);
     
    }