这么做是因为像sin(x)万博manbetx官网那样的函数,做图像管理发掘 哇

c#下的大约2D图像处理那么些本来也是没什么可说的
我自身也不做图像管理方面包车型大巴纠正专门的工作。一天为了工作 毫无作为写多少平台下的业务代码 ,其实那么些东西交大学都用不怎么上。 出了校门这么久了
高级中学的这多少个sin cos 向量 是干嘛的 怎么都用不上。 做图像管理意识 哇
都用上了 原本数学这么风趣 以至还有只怕会用上部分大学的数学知识。在数学的社会风气里
会开采Computer程序语言仅仅是工具 而已。你在C++ java下 也是同等的
算法都以同等 。
首先说下自家要讲的也没怎么技艺含量。其实这么些事物在许多图像Curry都自带了。这里只是想简明提一下他的规律
能够做哪些 ,要是Curry没有自带呢
假使在这种刀耕火种的嵌入式设备平台下编代码呢 正是考验你的时候到了噻。
不过在windows平台下 成熟的大平台下
这种考验你的机遇非常小大概。成熟的大平台下软件开辟各样外界可供调用的事物一坨一坨的 正是写作业代码
也没怎么技能含量的。小编写的东西 基本开篇都要bb一番的 纵然也没啥本事,别拍砖。好正题 。

1. 引子

看傅立叶转换的时候,一贯奇异,幂指数是怎么映射成三角函数的?学习了须臾间欧拉公式,果然很奇妙,用到了当然常数e,圆周率π,虚数i,三角函数sin/cos,指数,还有Taylor张开.不是算法有多难,只是提到基础太多,平日被堵塞,总括如下.

向量总括及其使用

2. Taylor举办

Taylor进行是用多项式逼近原函数,这么做是因为像sin(x)那样的函数,借使代入x=4很难算出结果,不过将x的值代入形如f(x)=a0+a1x+a2x2+a3x3…的多项式就很轻松总括。具体是用原函数的导数达成的,把函数张开成多项式,公式如下:

万博manbetx官网 1

图片.png

其中Rn(x)是余项

万博manbetx官网 2

3. 本来常数e

e是当然常数(欧拉数),它是三个相当于2.718的无理数,定义是

万博manbetx官网 3

图片.png

它的意义可以经过复利来驾驭,若是你有1块钱,年利息是1块钱(百分之百),一年后可得到两块钱(1+1/1)1=2;按利滚利计算,如果半年付一次利息(1+1/2)2=2.25;三个月付二回息,(1+1/12)12=2.61;每天付一次息,(1+1/365)365=2.715,当x驱于无穷时e约为2.718.

万博manbetx官网 4

4. 理之当然指数e^x的Taylor级数张开

把ex在x=0处展开,由于e0=1且ex的导数还是ex,打开后获取

万博manbetx官网 5

图片.png

万博manbetx官网 6

图片.png

上海体育场合是e^x,以及张开式前5项和前10项拟合的图像

 

5. 复数

复数是形如a+b*i的数,当中a,b是实数,i^2=-1.(对应直角坐标系)
在复变函数(复数作为自变量和因变量的函数)中,变量z能够写成z=r (cosθ+
isinθ) .r是z的模,即r = |z|;
θ是z的辐角,复数记作点Z(a,b)或向量OZ(对应极坐标系)

万博manbetx官网 7

图片.png

把乘三回i看成绝对0点逆时针转90度,乘一回,转180度,转成实轴的-1,转一回是-i,转四遍又回去单位1。由此可以把其虚部看成定义如何旋转。

 1 //向量的声明:
 2 //向量和点 虽然都用坐标的方式表示 ,但是它们意义有本质的区别
 3 //向量和点 在c#可以强制互相转换
 4 //(WPF 里用Vector WPF里有很多原来winform模式下重复功能的库,WPF也在重复造轮子
 5 Vector v1 = (Vector)new System.Windows.Point(1, 0);
 6 Vector v2 = (Vector)new System.Windows.Point(0, 1);
 7 
 8 System.Windows.Point p1 = (System.Windows.Point)new Vector(1, 0);
 9 
10 
11 //向量的运算:
12 //基本方式是x+x  y+y 不用多说噻
13 //其实两个向量相加并没有明确的几何意义 ,点和向量相加 代表一个点移动到另一个点
14 //高中学过 两个向量相加是一个新的向量
15 //vector 重载了+ 运算符 所以 向量向量之间  点和向量之间均可进行运算,就像高中数学里那样
16 //向量的值v3为(1,1) 是不是跟高中学的一样;
17 Vector v3 = v1 + v2;
18 MessageBox.Show(string.Format("x={0},y={1}", v3.X, v3.Y));
19 //减去一个向量等于加上一个方向相反的向量  这里输出的值v4为(0.5,0.5)
20 Vector v4 = v3 - new Vector(0.5, 0.5);
21 MessageBox.Show(string.Format("x={0},y={1}", v4.X, v4.Y));
22 
23 
24 //利用向量你能够做什么:
25 //高中数学里的有一章 记得么 ,利用向量运算 检测两条直线是否平行 是否垂直 。
26 //三维空间法线计算  你都可以利用此原理
27 //我想 在游戏里 工程计算 这些地方都会用到 发挥你的想象力

6. 把虚数i代入e^x的张开式

虚数i是-1开方,因此有i^1=i, i2=-1,i3=-i,i^4=1

万博manbetx官网 8

图片.png

那时能够见到其结果分为实部和虚部两片段

用的图 是WPF自学手册里面包车型客车 然后是Vector那几个东西独有WPF里才有
,当然你用point本人达成也得以。

7. 把sin(x)做Taylor级数打开

在x=0处展开,由于sin(0)=0,cos(0)=1,sin’(x)=cos(x),cos’(x)=-sin(x)

万博manbetx官网 9

图片.png

然后是 ,点阵图片的旋转:

8. 把cos(x)做Taylor级数张开

在x=0处展开

万博manbetx官网 10

图片.png

这一个掌握稍微复杂点,如故先上海体育场合

9. 欧拉公式

由上述几步,能够观察e^ix的实部和虚部正好对应sin(x)和cos(x)的举办,据此,获得欧拉公式:

万博manbetx官网 11

图片.png

欧拉公式将指数函数的定义域扩展到了复数域,构建了三角函数和指数函数的涉嫌,被誉为“数学中的天桥”。
下图中,将上式左侧表示为二维坐标中的点,xy轴分别代表其实部虚部,θ为转角(即上式中的x),转动半径为单位1(模不改变).它的几何意义就是随着虚部x的增添不断转圈.

万博manbetx官网 12

图片.png

可以把 e^(ix)
看作通过单位圆的圆圆运动来说述单位圆上的点,e^(i
x)表示在单位圆上转动了x弧度(即有些角度时)获得的向量,依此类推,e^(πi)在单位圆上转了半圈。鲜明赢得的是实轴上的-1,然后与1合并可平衡获得0
,由此得到 :

万博manbetx官网 13

图片.png

万博manbetx官网 14

10. 扩展成时间的函数

万博manbetx官网 15

图片.png

上海教室中又踏入了t,把e(ix)想成e(iwt),t是时间,w是周全。把平面上的转换体制扩张成了半空中中的转圈,纵轴表示时间t,三个横轴分别为实部(cos(t))和虚部(sin(t)),蓝线经过的点是eix,即,把时域上的eix分别投射到了实轴cos(t)和虚轴sin(t),它们都是时间t的函数.图中可观察正余和余弦的映射(红/绿),假诺用python做3D图,拖动旋转角度效果越来越直观.那就傅立叶转变原理:将时域值拆分映射到频域,通过三角函数的增大代表。

这种事物本人纯口水话描述 讲出来也不必然能达到规定的标准效果。

现实理论丰硕利用了三角函数 r是坐标(0,0) 到具体点的半径。

首先看r*sin(阿尔法+雷峰塔) 这里(阿尔法+西塔) 正是这么些大的角的角度。

sin(alpha+比萨塔)为 对边/r  ,若是再乘以r  那么不正好等于对边的长度么
,即点的Y值。

此间的sin(阿尔法+开封木塔) 就供给 利用 三角函数的和角公式 sin(A+B) =
sinAcosB+cosAsinB。

本来其实不用也得以 ,别打笔者。

还索要利用Asin 函数 同是三角函数里的  根据正弦值
反向求角度。反正只要得到图中多少个参数照公式套就足以了。

透过此类各样手法 就足以把图纸全部旋转后的点求出来达到旋转图片的目标。

事实上海体育场所桐月经给出去了,然后对各类点依次总括 就能够了。

 1 void rotate()
 2 {
 3     //旋转 
 4 
 5     /*
 6      * 矩阵信息
 7      * cos&     sin&
 8      * -sin&    cos&
 9      */
10     System.Drawing.Bitmap bmp = (Bitmap)System.Drawing.Image.FromFile("Tulips.jpg");
11 
12     System.Drawing.Bitmap bmp2 = new Bitmap((int)(bmp.Width ), (int)(bmp.Height ));
13 
14     for (int i = 0; i < bmp.Height; i++)//row
15     {
16         for (int j = 0; j < bmp.Width; j++)//col
17         {
18             //获取原始RGB
19             System.Drawing.Color sourceRGB = bmp.GetPixel(j, i);
20             //通过矩阵运算到新的坐标
21             double r = Math.Sqrt(Math.Pow(j, 2f) + Math.Pow(i, 2f));
22             double alpha = Math.Asin(i / r);
23             double xita = Math.PI / 6;
24 
25             int x1 = (int)((r * Math.Cos(alpha) * Math.Cos(xita)) -
26                 (r * Math.Sin(alpha)) * (Math.Sin(xita)));
27 
28             int y1 = (int)((r * Math.Sin(alpha) * Math.Cos(xita)) +
29                 (r * Math.Cos(alpha)) * (Math.Sin(xita)));
30 
31             if ((x1 >= 0 && x1 < bmp2.Width) && (y1 >= 0 && y1 < bmp2.Height))
32                 bmp2.SetPixel(x1, y1, sourceRGB);
33         }
34     }
35 
36     bmp2.Save("22.jpg", ImageFormat.Bmp);
37 }

此处的 xita是角度 double xita = Math.PI / 6;  代表30度 大家来看下成果:

万博manbetx官网 16万博manbetx官网 17万博manbetx官网 18

 

位移跟拉伸 那二个自个儿想原理是太简单了自己就不讲了。
祝大家星期六喜欢。

 

相关文章