逆透视变换c语言

针对逆透视变换c语言的内容, 嗨壳技术分享网今天给大家作出详细的解答吧!

  求大佬给一个c语言写的透视变换算法

  int count = 0;

  for(int i=0;iimg_height;i++){

  uchar* p = img.ptruchar(i);

  for(int j=0;jimg_width;j++){

  int y = points_trans[count].y;

  int x = points_trans[count].x;

  uchar* t = img_trans.ptruchar(y);

  t[x*3]  = p[j*3];

  t[x*3+1]  = p[j*3+1];

  t[x*3+2]  = p[j*3+2];

  count++;

  }

  }

  核心代码就是这了

  哪位大神知道laplace变换和逆laplace变换的C++/C的算法么,小弟急求啊….希望大神不吝赐教啊…

  拉普拉斯c语言程序

  double uniform(double a,double b,signed int seed)

  {

  double t;

  seed=2045*seed+1;

  seed=seed-(seed/1048576)*1048576;

  t=(seed)/1048576.0;

  t=a+(b-a)*t;

  return(t);

  }

  /*******************************************************************

  * 拉普拉斯随机分布

  * beta–拉普拉斯分布的参数

  * seed–随机数种子

  *******************************************************************/

  double laplace(double beta,signed int seed)

  {

  double u1,u2,x;

  u1=uniform(0.,1.,seed);

  u2=uniform(0.,1.,seed);

  if(u1=0.5)

  x=-beta*log(1.-u2);

  else

  x=beta*log(u2);

  return(x);

  }

  利用C语言实现二维图形的变换

  你先看看吧,思路大概就是这样,不懂的问我。

  #includestdio.h

  #includemath.h

  #includeiostream

  using namespace std;

  struct point

  {

  float x;

  float y;

  };

  void translation(point*pt, float xp,float yp,int num)//num代表点的个数

  {

  for(int i=0;inum;i++)

  {

  (pt+i)-x+=xp;

  (pt+i)-y+=yp;

  }

  }

  void scale(point *pt,float xs,float ys,int num)

  {

  for(int i=0;inum;i++)

  {

  (pt+i)-x*=xs;

  (pt+i)-y*=ys;

  }

  }

  void rotation(point *pt,float angle,int num)

  {

  int a[2][2];

  angle=angle/180*3.141592657;

  a[0][0]=cos(angle);

  a[0][1]=-sin(angle);

  a[1][0]=sin(angle);

  a[1][1]=cos(angle);

  point* temp;

  for(int i=0;inum;i++)

  {

  temp-x=(pt+i)-x;

  temp-y=(pt+i)-y;

  (pt+i)-x=temp-x*a[0][0]+a[0][1]*temp-y;

  (pt+i)-y*=temp-x*a[1][0]+a[1][1]*temp-y;

  }

  }

  int main()

  {

  int i=0,N,mode,angle,xp,yp,xk,yk,num;

  cout”please input the number of point “endl;

  scanf(“%d”,N);

  num=N;

  point pt[10];

  while(N–)

  {

  printf(“please input points(x,y):

  ”);

  scanf(“%f%f”,pt[i].x,pt[i].y);

  i++;

  }

  printf(“please input motions

  ”);

  printf(“0 stand for translation:

  ”);

  printf(“1 stand for scale:

  ”);

  printf(“2 stand for rotation:

  ”);

  scanf(“%d”,mode);

  switch(mode)

  {

  case 0:

  printf(“please input the translation in x and y direction respectivly:

  ”);

逆透视变换c语言

  cinxpyp;

  translation(pt, xp,yp,num);

  break;

  case 1:

  printf(“please input the scale in x and y direction respectivly:

  ”);

  scanf(“%f%f”,xk,yk);

  scale(pt, xk,yk,num);

  break;

  case 2:

  printf(“please input the angle:

  ”);

  scanf(“%f”,angle);

  rotation(pt, angle,num);

  break;

  }

  printf(“after translatiton or scale or rotation:

  ”);

  for(int i=0;inum;i++)

  printf(“%f %f

  ”,pt[i].x,pt[i].y);

  }

  求一个C语言图形变换程序,先进行图形绘制,后能进行图形复制、移动、缩放、旋转,跪求啦。。。

  从这一部分开始,进入了图形编程的比较烦琐的部分,要真正对图形编程有所了解,这一部分的内容是必须要掌握的。

  在计算机绘图过程中,经常需要进行绘图变换,主要包括二维图形变换和三维图形变换。这一部分讨论二维图形变换,其内容有用户坐标到屏幕坐标的变换、图形的比例变换、对称变换、错切变换、旋转变换、平移变换和复合变换等。后面讲到了二维剪裁,即线段裁剪与多边形裁剪。

  第一节 用户坐标到屏幕坐标变换

  假设纸上有一个图形,要用计算机把它在屏幕上画出来。那么首先遇到的问题是,纸上的图形采用的坐标是实数域域中的直角坐标系或是极坐标系,统称为用户坐标系。而屏幕上采用的坐标系是整数域中直角坐标系,这类坐标系统称为设备坐标系。因此用户坐标系中图形需要经过变换才能绘制在屏幕上,显然这个变换的内容包括: 1)将用户坐标系中任意范围区域转换到屏幕某个范围区域,从而用户坐标系此范围区域内的图形也转换到屏幕上该范围区域内。 2)用户坐标系此区域内图形上的坐标值转换到屏幕上该范围区域内后不一定是整数,取整后才成为该范围区域内的屏幕坐标值。 3)用户坐标右手系到屏幕坐标左手系的坐标轴方向变换。 4)当屏幕坐标系水平方向与垂直方向刻度不等(即像素间距不等)时,为保持图形不走样,还要进行比例变换。下面介绍这些内容的具体计算问题。

  1.窗口到视口的变换

  更确切地说,是实际图形到屏幕图形的转换。有时也称为数据规格化。

  在用户坐标系中,指定一矩形域以确定要显示(或绘制)的图形部分,这个矩形区域称为窗口。在屏幕上可任选一矩形域以显示(或绘制)窗口内的图形,该域称为视口。如图2-1所示。

  一般视窗口的四条边界分别为:

  左边界 x=x1、右边界 x=x2.下边界 y=y1,上边界y=y2。

  视口的四条边界分别为:

  左边界sx=sx1,右边界sx=sx2,上边界sy=sy1,下边界sy=sy2。

  经变换后应有,窗口的上边界线段(或下边界线段)长x2-x1变换成视口上边界线段(或下边界线段)长sx2-sx1。设其比例变换因子为k1,则可得

  k1*(x2-x1)=sx2-sx1

  k1=(sx2-sx1)/(x2-x1)

  对窗口内任一x坐标(x1=x=x2)变换后为视口内水平方向sx坐标(sx1=sx=sx2)。由上述有:

  k1*(x-x1)=sx-sx1

  sx=sx1+k1*(x-x1)

  =sx1+(x-x1)*(sx2-sx1)/(x2-x1)

  同样,经变换后窗口的左边界线段(或右边界线段)长y2-y1变换成视口左边界线段(或右边界线段)长sy2-sy1。设其比例变换因子为k2,则可得

  k2*(y2-y1)=sy2-sy1

  k2=(sy2-sy1)/(y2-y1)

  对窗口内任一y坐标(y1=y=y2)变换后为视口内垂直sy坐标(sy1=sy=sy2),应有

  k2*(y-y1)=sy-sy1

  sy=sy1+k2*(y-y1)

  =sy1+(y-y1)*(sy2-sy1)/(y2-y1)

  于是对窗口内图形上任一点坐标(x,y)变换到屏幕上视口内成为(sx,sy),则

  sx=sx1+(x-x1)*(sx2-sx1)/(x2-x1)

  sy=sy1+(y-y1)*(sy2-sy1)/(y2-y1)

  写成简式

  sx=k1*x+a

  sy=k2*y+b

  这里

  a=sx1-k1*x1

  b-sy1-k2*y1

  k1=(sx2-sx1)/(x2-x1)

  k2=(sy2-sy1)/(y2-y1)

  2. 实型值到整型值的变换

  上面对窗口内图形上任一点坐标(x,y)变换到屏幕上视口内成为(sx,sy),

  sx=k1*x+a

  sy=k2*y+b k1,k2,a,b同上

  这样计算出来的sx,sy一般是实型值,而屏幕上视口内屏幕坐标是整型值,因此要将sx,sy实型值转换成屏幕坐标系的整型值。这可以通过四舍五入的方法将实型值的绝对值圆整化。由于C语言中已经替我们想到了这点,它提供的函数可以自动取整,因此用户在调用标准函数在屏幕上绘图时一般不需要考虑这个问题。当然也可以用赋值的类型转换规则来实现实型值到整型值的变换。

  3. y坐标值方向变换

  一般屏幕坐标系是直角左手系,y轴方向向下为正,原点在屏幕的左上角,如图2-2所示。

  窗口内图形上任一点(x,y)变换到视口内成为(sx,xy),而(x,y)是相对用户坐标系(直角右手系)的。(sx,sy)是相对屏幕坐标系(直角左手系)的,因此y轴方向相反。为使窗口内图形变换到视口上图形其形状一致,需将视口上图形y轴方向变换成窗口内图形y轴方向。这只要将求得的视口内各点的sy整型坐标均用sy2去减,即sy2-sy(整型)代替sy(整型)即可,经这样的坐标轴方向变换后得到的视口内图形与窗口内图形一致。

  4.长宽比例变换

  屏幕坐标系x方向与y方向上的刻度可能不一样,这取决于水平方向像素间距与垂直方向偈素间距大小是否一致。如果两个方向的刻度不相等,那么用户坐标系下一个正方形将显示(或绘制)成为一个长方形有,一个圆将成为一个椭圆。

  为保持原图形的长宽比。使图形显示(或绘制)后不走样,需求出屏幕上两侍标轴刻度的比值(即纵横比)。可以用函数getaspectratio()(见前文所述)返回x方向和y方向的比例数,从而求得这个比值。再瘵原图形y方向坐标乘以该比值,这样显示(或绘制)出来的图形应不走样。若不考虑图形的走样,就不必作这个变换。

  第二节 二维几何变换

  图形的几何变换一般是指对图形的几何信息经过变换后产生新的图形,图形几何变换既可以看作是坐标系不动而图形变动,变动后的图形在坐标系中的坐标值发生变化;出可以看作图形不动而坐标系变动,变动后的图形在新坐标系下具有新的坐标值。这两种情况本质上都是一样的,都是图形由新的坐标值表示,因此是新产生的图形。图形几何变换包括比例变换、对称变换、错切变换、旋转变换、平移变换及其复合变换。图形上所有的点在几何变换前后的坐标关系一般用解析几何方法可以求得,但这些几何关系用矩阵方法表示,运算更为方便。

  一、基本变换

  图形基本几何变换是指比例变换、对称变换、错切变换、旋转变换和平移变换等。除平移变换外,这里其它四种几何变换都可以用组成图形的点向量(或称1×2阶矩阵)和2×2阶变换矩阵相乘表示,而平移变换需引入新方法来实现。

  1、比例变换

  设图形上一点P(x,y),经比例变换后成为新的菜上一点P'(x’,y’),即有

  x’=a*x

  y’=d*y

  式中a,d为比例因子

  将此比例变换式写成矩阵式得

  a 0

  [x’ y’]=[x y] = [x y] * T

  0 d

  a 0

  这里 T= 叫做比例变换矩阵。若a=d,则x,y坐标按同一比例变换。

  0 d

  当a=d1时,图形放大;当0a=d1时,图形缩小。

  若a≠d,则x,y坐标按各自不同比例变换。

  3 0

  例 1: 设有比例变换矩阵 T= , 三角形abc经过比例变换成为三角形a’b’c’。

  0 1

  如图2-3所示。

  3 0

  a [1 2] = [3 2] a’

  0 1

  3 0

  b [2 2] = [6 2] b’

  0 1

  3 0

  c [2 3] = [6 3] c’

  0 1

  2. 对称变换

  图形上一点P(x,y)经关于原点对称变换后成为新图形上一点P'(x’,y’),则

  x’ = -x

  y’ = -y

  写成矩阵形式成为

  -1 0

  [x’ y’] = [x y] = [x y] * T

  0 -1

  -1 0

  这里 T = 为关于原点对称变换矩阵。

  0 -1

  若关于x轴对称,则对称变换的矩阵表示为

  1 0

  [x’ y’] = [x y] = [x y] * T

  0 -1

  1 0

  于是关于x轴对称变换矩阵 T =

  0 -1

  若关于y轴对称,则对称变换的矩阵表示为

  -1 0

  [x’ y’] = [x y] = [x y] * T

  0 1

  -1 0

  于是关于y轴对称变换矩阵 T =

  0 1

  若关于直线y = -x对称,则对称变换矩阵表示为

  0 -1

  [x’ y’] = [x y] = [x y] * T

  -1 0

  0 1

  于是关于直线 y = x对称变换矩阵 T =

  1 0

  各种对称变换的图形均可由实例程序绘出,参见实例程序图形。

  3. 错切变换

  对图形的任一点P(x,y),作线性变换如下

  x’ = x + by

  y’ = y + dx

  式中b,d为不全为零的常 数,点P'(x’,y’)为新图形上相应的点,这个变换称为图形的错切变换。

  错切变换的矩阵表示为

  1 d

  [x’ y’] = [x y] = [x y] * T

  b 1

  1 d

  T = 叫做错切变换矩阵(b,d不全为零)。

  b 1

  ① 当d=0时,x’=x+by,y’=y,这时图形的y坐标不变,x坐标值随(x,y)及系数b作线性变化。若b0时,图形沿x轴作错切位移;若b0,图形沿x轴负向作错切位移。

  ② 当b=0时,x’=x,y’=dx+y,此时图形的x坐标不变y坐标随(x,y)及系数d作线性变化。如d0,图形沿y轴正向作错切位移;如d0,图形沿y轴负向作错切位移。

  ③ 当b≠0且d≠0时,x’=x+by,y’=y+dx,图形沿x,y两个方向作错切位移。

  1 2

  例 2: 设有错切变换 矩阵 T = ,正方形abcd经此错切变换成为四边形a’b’c’d’,

  0 1

  如图2-4所示。

  1 2

  a [0 0] = [0 0] a’

  0 1

  1 2

  b [1 0] = [1 2] b’

  0 1

  1 2

  c [1 1] = [1 3] c’

  0 1

  1 2

  d [0 1] = [0 1] d’

  0 1

  4. 旋转变换

  设图形上一点P(x,y)绕原点逆时针旋转θ角后成为新的图形上一点P'(x’,y’),则由解析几何方法可得

  x’ = xcosθ + ysinθ

  y’ = -xsinθ + ycosθ

  用矩阵表示为

  cosθ -sinθ

  [x’ y’] = [x y] = [x y] * T

  sinθ cosθ

  cosθ -sinθ

  这里 T = 为绕原点逆时针变换矩阵。若顺时针旋转时,θ角为负值。

  sinθ cosθ

  5. 平移变换

  若图形上一点P(x,y)沿x轴平移 l距离,沿y轴平移m距离后成为新的图形上一点P'(x’,y’),则有

  x’ = x + l

  y’ = y + m

  式中l,m不全为零,这称为平移变换。但此变换无法用组成图形的点向量和2×2阶变换矩阵相乘来实现。

  用二维点向量和2×2阶矩阵相乘不能表示图形的平移变换,那么自然会想到用三维点向量和3×3阶矩阵相乘来实现图形的平移变换。因此对图形上二个坐标的点向量需要添加一个坐标,使之成为三维点向量以便与三阶矩阵相乘,进而实现用矩阵表示平移变换。实际上就是对上面的二个坐标变换式添加第三个坐标变换式,即成为

  x’ = x + l

  y’ = y + m

  k = k

  这第三个坐标变换式(即k=k)必须是恒等式,因为不需作变换,本质上是为了进行矩阵运算而引入的。

  将此三个变换式(仍然是图形的平移变换,不妨将k = k取成1=1)写成矩阵得

  1 0 0

  [x’ y’ l] = [x y l] 0 1 0 = [x y 1] * T

  l m 1

  1 0 0

  显然 T = 0 1 0 为图形的平移变换矩阵。

  l m 1

  这里通过对原图形上二维点向量引进第三个坐标成为三维点向量,从而使原图形的平移变换 能用矩阵表示。同样其它基本变换也可以如此用矩阵表示。因此图形的基本变换都可以在这样的三维点向量下统一、整齐用矩阵表示。这样的三维点向量称为齐次点向量,也叫三维齐次坐标点,简称三维齐次坐标。只有在三维齐次坐标下,二维几何变换才都可以用矩阵表示。下面再进一步讨论一下齐次坐标的优点。

  引用齐次坐标后,可将上面各种基本变换矩阵统一在一个三阶矩阵中。即

  a b 0

  T = c d 0

  l m 1

  式中左上角二阶矩阵实现比例、对称、错切、旋转等变换,左下角1×2阶矩阵实现平移变换,其中a,b,c,d,l,m只要赋以相应的值,并建立图形上点的齐次坐标(即在图形上点的坐标后引入第三个坐标1),这样就可以用图形上点的三维齐次坐标与此三阶矩阵相乘来表示三维图形的基本几何变换了。而变换后,不用考虑第三个坐标1,前面两个坐标就反映了图形的整个变换情况。

  用齐次坐标表示一个图形上的点,可以有多种表示,如(6,8,1)、(12,16,2)、(30,40,5)等均表示图形上同一个点(6,8)。这样,齐次坐标可以表示计算机无法容纳的数。例如当计算机的字长为16位时,它能表示的最大整数为216-1=32767。若点坐标为(80 000,40 000),则计算机无法表示。但用齐次坐标可表示为(20 000,10 000,1/4),经过处理后再用第三个坐标支除前面两个坐标,从而得到原来通常的坐标。

  齐次坐标优点很多,在计算机绘图中都采用这种表示来处理图形。下面介绍的图形复合几何变换就是如此。

  二、复合变换

  图形的复合几何变换是指图形作一次以上的基本几何变换,变换结果是每次基本变换矩阵的乘积。图殂的复合几何变换简称复合变换。

  1. 复合平移

  若对图形首先作平移变换 T1,然后再作平移变换T2,相应的平移变换矩阵分别为

  1 0 0

  T1 = 0 1 0

  l1 m1 1

  1 0 0

  T2 = 0 1 0

  l2 m2 1

  则变换结果为复合平移变换T,其复合平移变换矩阵为

  T = T1 * T2

  1 0 0 1 0 0

  = 0 1 0 * 0 1 0

  l1 m1 1 l2 m2 1

  1 0 0

  = 0 1 0

  l1+l2 m1|m2 1

关于 逆透视变换c语言 的问题,嗨壳技术分享网(www.heikehao.com)小编就分享到这里吧!如果大家有疑问欢迎留言询问。

原创文章,作者:语言我知,如若转载,请注明出处:https://www.heikehao.com/134.html

(0)
语言我知语言我知
上一篇 2020年1月2日
下一篇 2020年1月2日

相关推荐

  • 怎么用虚拟机编译c语言程序吗

    今日,嗨壳技术分享网小编分享怎么用虚拟机编译c语言程序吗 相关内容,内容如下。   怎么用linux写c语言   1、第1步:安装build-essential软件包 为了编译和执…

    2020年5月14日
  • 汇编变为c语言

    今天,嗨壳技术分享网给大家整理一些汇编变为c语言内容。   怎么把汇编转换成C语言   如果 只是简单的几行,可以把编译后的exe文件,用系统自带的debug(windows键+R…

    2020年1月7日
  • 计算机二级c语言目录,计算机二级c语言考点汇总

    计算机二级c语言目录,计算机二级c语言考点汇总 大家并不陌生,借来给大家详细说说吧!   计算机二级考试《C语言》知识点归纳(3)   1、add(2,3); f(2,3); (*…

    2020年1月17日
  • 3a5的c语言表达式

    今日,嗨壳技术分享网小编分享3a5的c语言表达式 相关内容,内容如下。   c语言中3and5   1、你想问的应该是从语言中3and5怎么表示吧,表示为3&5。C语言中…

    2021年9月10日
  • c语言swhich函数

    今日,嗨壳技术分享网小编分享c语言swhich函数 相关内容,内容如下。   c语言中switch怎么用?   1、执行过程:先计算并获得switch后面小括号里的表达式或变量值,…

    2020年5月24日
  • 单片机串口打印c语言

    单片机串口打印c语言   单片机串行口通信程序C语言   1、打开串口调试软件,把波速率设置为2400,向板发送一个字节数据,软件应能接收到同样的数据。   2、Sector_er…

    2020年10月11日
  • 矩阵快速转置c语言 – 矩阵转置c语言算法

    今天,嗨壳技术分享网给大家整理一些矩阵快速转置c语言 – 矩阵转置c语言算法内容。   C语言,求3×3矩阵的转置矩阵(在自身进行转置)   方型矩阵转置比较简单,对上…

    2020年2月16日
  • 虚拟存储器管理c语言代码,虚拟存储器的执行过程

    今日,嗨壳技术分享网小编分享虚拟存储器管理c语言代码,虚拟存储器的执行过程 相关内容,内容如下。   c语言数组在内存中是怎么分配的?   C语言中内存为分三类:栈区、堆区、静态数…

    2020年5月10日
  • 显示时间10分c语言(c语言显示当前时间)

    今日,嗨壳技术分享网小编分享显示时间10分c语言(c语言显示当前时间) 相关内容,内容如下。   今天给各位分享显示时间10分c语言的知识,其中也会对c语言显示当前时间进行解释,如…

    2020年4月1日
  • c语言小数转字符串

    关于c语言小数转字符串话题,今日,嗨壳技术分享网小编抽出大半天的时间整理一些c语言小数转字符串内容,让我们一起了解一些技术吧!   c语言怎么将一个10小数转换成字符串   用sp…

    2020年5月9日

网上怎么找黑客帮忙多少钱

怎么网上找到的黑客?黑客的收费标准是什么呢?找黑客一般费用是多少?


找黑客帮忙一般要多少钱

黑客服务的价格范围很广,主要取决于服务的类型和难度。根据提供的信息如下:


1.攻击服务:


攻击范围:这包括了通过扫描入侵、种植木马等方式对他人计算机实施非法控制,并利用被控制的计算机对网站、App等服务器发起攻击


。1

2.特定账户的售价:


账户信息:如垂钓者、而勒索软件,显示市场对特定黑客工具的需求和价格波动。

3.攻击工具:

“RIG”攻击工具包的租用费用,提供了不同时长的选择。

4.远程访问木马(RAT)的价格:

相比去年有所下降,显示出市场价格的波动。

5.DDOS攻击的报价:

DDOS攻击服务按不同时长定价选择。

黑客服务的价格因服务类型、难度、以及市场需求的不同而有很大的差异。这些价格反映了黑客服务市场的复杂性和多样性,同时也提醒人们网络安全的重要性。