TCAX 字幕特效制作工具官方论坛 | ASS | TCAS | Python | Aegisub | Lua
标题:
求获取frz旋转后坐标的方法
[打印本页]
作者:
我们的夏天
时间:
2011-11-17 15:56:21
标题:
求获取frz旋转后坐标的方法
本帖最后由 我们的夏天 于 2011-11-18 18:18 编辑
求教。。。
有没有函数或者方法可以获取一个pos沿org然后frz某个度数后的pos吗?
比如afterfrz(x,y,orgx,orgy,ang)然后返回旋转后的x,y坐标。。。。
作者:
milkyjing
时间:
2011-11-17 19:05:48
空间解析几何坐标变换公式 (如果单是frz的话, 平面解析几何就足够了)
其中, x, y为原pos, theta为旋转角度
下面这个是相关的VSFilter的源代码片段
void CWord::Transform(CPoint org)
{
double scalex = m_style.fontScaleX/100;
double scaley = m_style.fontScaleY/100;
double caz = cos((3.1415/180)*m_style.fontAngleZ);
double saz = sin((3.1415/180)*m_style.fontAngleZ);
double cax = cos((3.1415/180)*m_style.fontAngleX);
double sax = sin((3.1415/180)*m_style.fontAngleX);
double cay = cos((3.1415/180)*m_style.fontAngleY);
double say = sin((3.1415/180)*m_style.fontAngleY);
for(int i = 0; i < mPathPoints; i++)
{
double x, y, z, xx, yy, zz;
x = scalex * (mpPathPoints[i].x + m_style.fontShiftX * mpPathPoints[i].y) - org.x;
y = scaley * (mpPathPoints[i].y + m_style.fontShiftY * mpPathPoints[i].x) - org.y;
z = 0;
xx = x*caz + y*saz;
yy = -(x*saz - y*caz);
zz = z;
x = xx;
y = yy*cax + zz*sax;
z = yy*sax - zz*cax;
xx = x*cay + z*say;
yy = y;
zz = x*say - z*cay;
zz = max(zz, -19000);
x = (xx * 20000) / (zz + 20000);
y = (yy * 20000) / (zz + 20000);
mpPathPoints[i].x = (LONG)(x + org.x + 0.5);
mpPathPoints[i].y = (LONG)(y + org.y + 0.5);
}
}
复制代码
参考链接:
http://zh.wikipedia.org/wiki/%E6%97%8B%E8%BD%AC
http://zhidao.baidu.com/question/31601042
作者:
BurySakura
时间:
2011-11-17 21:20:16
def circle(_r, _t):
'''圆上的点'''
_x = round(_r*math.cos(_t*3.141592653589793/180),5)
_y = round(_r*math.sin(_t*3.141592653589793/180),5)
return [_x, _y]
复制代码
_x,_y加上org的坐标就可以了。
r = ((x-x')**2+(y-y')**2)**0.5
(死
作者:
milkyjing
时间:
2011-11-17 21:29:43
我们的夏天 发表于 2011-11-17 21:13
呃,度娘知道的那个参考页面里评论说该公式只适用于逆时针旋转,悲剧的是恰好旋转角是负的。。。
加之数学矩 ...
正负不影响吧, 如果是负数, sin(-30) = -sin(30), cos(-30) = cos(30), 公式不变....
p.s. 其实-30和330是等价的(360-30)
p.s.2. 可以参考萌葬给的那函数....
作者:
愛萌就要控丶
时间:
2011-11-17 23:31:07
天哪,光是看着就晕了。。。虽然目前作为一个以数学为荣的高三党,一般数学考试拿135-140分还是没问题的。。。不过就以现在的水平来看这个完全就晕了,还要英语过关。。。虽然我英语也基本不下125分。。。
真想不到做个特效居然还要对立体解析几何有深入了解才行啊?!
作者:
我们的夏天
时间:
2011-11-17 23:53:09
本帖最后由 我们的夏天 于 2011-11-17 23:55 编辑
貌似懂了,萌葬的意思是不是这样(手机上的打不出论坛代码标签,将就着看吧):
def afterfrz(x,y,orgx,orgy,ang):
r = ((x-orgx)**2+(y-orgy)**2)**0.5
ax = round(r*cos(ang),5) + orgx
ay = round(r*sin(ang),5) + orgy
return (ax,ay)
python里三角函数单位是好像是角度,所以我没*pi/180,然后表示不知道有round这个函数,不知参数5是做什么的。。。(说起来,萌葬什么时候开始用python了
作者:
milkyjing
时间:
2011-11-18 02:43:19
round是圆滑取整函数,5大概表示四舍五入?可以用 int(x+0.5) 代替…
不过pos接受浮点数的…可以不用取整…
三角函数一般还是用弧度制的…角度制用起来不太方便
p.s. 公式粗略看了下,应该是正确的
p.s.2. 萌葬用python很长时间了 XD
作者:
BurySakura
时间:
2011-11-18 03:38:32
取5位小数进行四舍五入操作。
欢迎光临 TCAX 字幕特效制作工具官方论坛 | ASS | TCAS | Python | Aegisub | Lua (http://tcax.org/)
Powered by Discuz! X2