NCF参数化建筑论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 26480|回复: 30
打印 上一主题 下一主题

[网络资源] processing 犀牛化的类

[复制链接]
跳转到指定楼层
m
发表于 2010-7-8 22:44:48 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
本帖最后由 panhao1 于 2010-7-8 22:48 编辑 矩阵和3d点 很有用的类 用processing的时候可以作为文件导进去 3d点就是3d Vector 矩阵大家自己去改方法名 class Vector3d { Vector3d() { x = y = z = 0; }; Vector3d( float xx, float yy, float zz ) { x = xx; y = yy; z = zz; }; Vector3d( Vector3d v ) { x = v.x; y = v.y; z = v.z; }; void set( float xx, float yy, float zz ) { x = xx; y = yy; z = zz; }; void set( Vector3d v ) { x = v.x; y = v.y; z = v.z; }; void reset() { x = 0; y = 0; z = 0; }; Vector3d copy() { return new Vector3d( x, y, z ); }; void add( Vector3d v ) { x += v.x; y += v.y; z += v.z; } void sub( Vector3d v ) { x -= v.x; y -= v.y; z -= v.z; } Vector3 subtract( Vector3d v ) { Vector3d tmp = new Vector3d(); tmp.x = x - v.x; tmp.y = y - v.y; tmp.z = z - v.z; return tmp; } void mul( Vector3d v ) { x *= v.x; y *= v.y; z *= v.z; } void div( Vector3d v ) { x /= v.x; y /= v.y; z /= v.z; } // // Scalar // void mul( float s ) { x *= s; y *= s; z *= s; } void div( float s ) { x /= s; y /= s; z /= s; } float dot( Vector3d v ) { return ( x*v.x + y*v.y + z*v.z ); } public Vector3d cross( Vector3d v ) { float crossX = y * v.z - v.y * z; float crossY = z * v.x - v.z * x; float crossZ = x * v.y - v.x * y; return( new Vector3d(crossX, crossY, crossZ) ); } public float length() { return (float)Math.sqrt( (x*x) + (y*y) + (z*z) ); } public float lengthSqr() { return ( (x*x) + (y*y) + (z*z) ); } public float lengthXY() { return (float)Math.sqrt( (x*x) + (y*y) ); } public void normalize() { float m = length(); if (m > 0) { div(m); } } boolean SetCatmullRom( Vector3d V1, Vector3d V2, Vector3d V3, Vector3d V4, float s ) { float ss, sss, a, b, c, d; ss = s * s; sss = s * ss; a = -0.5f * sss + ss - 0.5f * s; b = 1.5f * sss - 2.5f * ss + 1.0f; c = -1.5f * sss + 2.0f * ss + 0.5f * s; d = 0.5f * sss - 0.5f * ss; x = a * V1.x + b * V2.x + c * V3.x + d * V4.x; y = a * V1.y + b * V2.y + c * V3.y + d * V4.y; z = a * V1.z + b * V2.z + c * V3.z + d * V4.z; return true; } boolean SetHermite( Vector3d V1, Vector3d T1, Vector3d V2, Vector3d T2, float s ) { float ss, sss, a, b, c, d; ss = s * s; sss = s * ss; a = 2.0f * sss - 3.0f * ss + 1.0f; b = -2.0f * sss + 3.0f * ss; c = sss - 2.0f * ss + s; d = sss - ss; x = a * V1.x + b * V2.x + c * T1.x + d * T2.x; y = a * V1.y + b * V2.y + c * T1.y + d * T2.y; z = a * V1.z + b * V2.z + c * T1.z + d * T2.z; return true; } boolean SetBaryCentric( Vector3d V1, Vector3d V2, Vector3d V3, float f, float g ) { x = V1.x + f * (V2.x - V1.x) + g * (V3.x - V1.x); y = V1.y + f * (V2.y - V1.y) + g * (V3.y - V1.y); z = V1.z + f * (V2.z - V1.z) + g * (V3.z - V1.z); return true; } Vector3 lerp( Vector3d V1, float s ) { return new Vector3d( x + s * (V1.x - x), y + s * (V1.y - y), z + s * (V1.z - z) ); } Vector3d transform( Matrix m ) { float xx = ( x*m._M[0] + y*m._M[4] + z*m._M[8] + m._M[12] ); float yy = ( x*m._M[1] + y*m._M[5] + z*m._M[9] + m._M[13] ); float zz = ( x*m._M[2] + y*m._M[6] + z*m._M[10] + m._M[14] ); return new Vector3d( xx, yy, zz ); } /********************************************************************** // Static methods **********************************************************************/ public static Vector3d VectorAdd( Vector3d a, Vector3d b ) { return new Vector3d( a.x+b.x, a.y+b.y, a.z+b.z ); } public static Vector3d VectorSub( Vector3d a, Vector3d b ) { return new Vector3d( a.x-b.x, a.y-b.y, a.z-b.z ); } public static Vector3d VectorMul( Vector3d a, Vector3d b ) { return new Vector3d( a.x*b.x, a.y*b.y, a.z*b.z ); } public static float VectorDotProduct( Vector3d v1, Vector3d v2 ) { return ( v1.x*v2.x + v1.y*v2.y + v1.z*v2.z ); } public static Vector3d VectorCrossProduct( Vector3d a, Vector3d b ) { float crossX = a.y * b.z - b.y * a.z; float crossY = a.z * b.x - b.z * a.x; float crossZ = a.x * b.y - b.x * a.y; return( new Vector3d(crossX, crossY, crossZ) ); } public static float DistanceTo( Vector3d v1, Vector3d v2 ) { float dx = v1.x - v2.x; float dy = v1.y - v2.y; float dz = v1.z - v2.z; return (float)Math.sqrt(dx*dx + dy*dy + dz*dz); } public static float Angle2Vec( Vector3d v1, Vector3d v2 ) { float dot = v1.dot( v2 ); float theta = (float) Math.acos(dot / (v1.length() * v2.length())); return theta; } public static VectorZero() { return new Vector3d( 0, 0, 0 ); } float x, y, z; };

评分

参与人数 1强度 +5 照度 +50 收起 理由
skywoolf + 5 + 50 感谢分享

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享
30m
发表于 2013-3-10 20:45:03 | 只看该作者
发上来的编码好乱的
29m
发表于 2012-4-25 11:38:53 | 只看该作者
掌握四个软件,而且是高难度的。真不容易
28m
发表于 2012-4-22 14:22:55 | 只看该作者
直接调用的写好的类啊,不错
27m
发表于 2012-2-3 21:18:27 | 只看该作者
我勒个去 这么长的代码。。。。先收着。。
26m
发表于 2012-1-20 11:02:56 | 只看该作者
强势学习中~楼主~我新入学的processing~能教教我该怎么学么?
25m
发表于 2012-1-13 14:21:58 | 只看该作者
神奇代码,表示看不懂,潘老大神人啊,代码天才
24m
发表于 2011-12-28 13:55:44 | 只看该作者
我下载了,就是一直没有用,不怎么会,
23m
发表于 2011-12-26 10:55:38 | 只看该作者
复杂化or简化?
22m
发表于 2011-11-30 12:27:15 | 只看该作者
这个还真是长啊…………努力学习中
21m
发表于 2011-9-12 19:22:56 | 只看该作者
菜鸟的我还是看不懂这些,慢慢来吧
20m
发表于 2011-8-31 02:10:44 | 只看该作者
感謝 先拿回去實驗了
19m
发表于 2011-3-20 23:24:45 | 只看该作者
不懂,,, 只能说发这个帖子的人很猛。。。
18m
发表于 2011-3-20 22:36:37 | 只看该作者
panhao果然猛
17m
发表于 2011-3-18 22:41:10 | 只看该作者
学习啦。。。。。
16m
发表于 2011-3-17 09:55:33 | 只看该作者
天书 收藏着 以后肯定用得上~~~
15m
发表于 2010-11-12 10:05:07 | 只看该作者
public Vector3 transform( Vector3 v )这个句子有错误!
14m
发表于 2010-10-22 10:38:15 | 只看该作者
好复杂阿。。。
13m
发表于 2010-9-18 19:11:46 | 只看该作者
哈哈,还没这个能力写啊,羡慕中
12m
发表于 2010-9-15 15:20:56 | 只看该作者
好长的说,但是尽量学习中
11m
发表于 2010-9-6 10:46:29 | 只看该作者
强 看的我头疼

小黑屋|手机版|NCF参数化建筑论坛 ( 浙ICP备2020044100号-2 )    辽公网安备21021102000973号

GMT+8, 2024-5-14 13:34 , Processed in 0.324442 second(s), 20 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表