@darkproject
2019-10-25T06:16:50.000000Z
字数 2566
阅读 1206
智商恢复
恢复被虐的最惨的一次吧,当时并不知道TA考察点。图形渲染知识基础一定要扎实,不是计算几何选手,很少做几何题。
1.判断点在多边形内部 (编程题)
2.不用分支语句推导三角波函数(编程题)ps:给一个三角波函数图像,输入x得到y。
3.GPU instance中,渲染大量草用什么方式存储草的颜色位置比较好,说明原因
-constant buffer -structured computebuffer -Texture2D
4.双线性过滤 4x各向异性过滤 邻近点过滤和三次插值,双三次插值,线性插值优化过后的采样次数
5.给你场景物体的顺序和混合因子让你计算最后颜色缓存的rgba
6.hsv的概念,rgb转hsv的公式
7.美术给模型做细分和GPU曲面细分的适用场合和优缺点
8.正交投影下计算良好效果边缘光的方法
9.描述一下沙漠的地貌特征和形成原因
10.色相差(Chromatic aberration)的表现和实现方法
11.IEEE754标准单精度浮点数能表示多少个数
12.perlin噪声用于随机生成地形的主要2个参数分别是什么
hdu 2199(浮点二分&牛顿迭代)
给予高次方程的解,求是否有满足在0到100的变量x。fabs(y)<=1e10。浮点二分x判断注意浮点二分的写法。牛顿迭代逼近x1=x-f/f`
#include <iostream>#include <cmath>#include <cstdio>#include <algorithm>#define eps 1e-6using namespace std;double f(double x){return 8*x*x*x*x+7*x*x*x+2*x*x+3*x+6;}int main(){int t;cin>>t;while(t--){double y;cin>>y;if(f(100)<y||f(0)>y)cout<<"No solution!"<<endl;else{double l=0.0;double r=100.0;double mid=(l+r)/2;while(fabs(f(mid)-y)>eps){//cout<<mid<<endl;if(f(mid)>y) r=mid-1;else l=mid+1;mid=(l+r)/2;}printf("%.4f\n",mid);}}return 0;}
#include <iostream>#include <cmath>#include <cstdio>#include <algorithm>#define eps 1e-6using namespace std;double f(double x){return 8*x*x*x*x+7*x*x*x+2*x*x+3*x+6;}double fx(double x){return 32*x*x*x+21*x*x+4*x+3;}int main(){int t;cin>>t;while(t--){double y;cin>>y;double x1=1;double x;if(f(100)<y||f(0)>y)printf("No solution!\n");else{do{x=x1;x1=x-(f(x)-y)/fx(x);}while(fabs(x1-x)>eps);printf("%.4f\n",x);}}return 0;}
hdu1756(射线法判断点在多边形内部)
射线法计算点向右射线与多边形边界相交的次数,如果为奇数则在内部,偶数则不在内部。需要注意是否严格要求内部否则要丢弃点在边界上的情况。如果射线相交为完整的边,不考虑。1.判断是否在边界上结合叉积和点积判断,叉积为0代表共线,但不一定在2点之间线段上,点积小于0,确认在2点线段之间。2.if(p1.y!=p2.y&&q.y<=max(p1.y,p2.y)&&q.y>min(p1.y,p2.y))--第一项防止相交为完整边,第二三确认有相交的情况,其中<=考虑相交为多边形端点情况。3.x=p1.x+(q.y-p1.y)/k(p1,p2);公式kx+b求出射线与边界相交点的x值,判断是否在边界的左边。射线法复杂度O(n)
#include <iostream>#include <cstdio>#include <algorithm>using namespace std;#define eps 1e-8const int maxn =105;int n,m;struct point{double x,y;point(double x=0,double y=0):x(x),y(y){}}p[maxn];point operator -(point a,point b){return point(a.x-b.x,a.y-b.y);}double cross(point a,point b){return a.x*b.y-a.y*b.x;}double dot(point a,point b){return a.x*b.x+a.y*b.y;}bool Online(point p1,point p2,point p){if(fabs(cross(p1-p,p2-p))<eps&&dot(p1-p,p2-p)<0)return true;return false;}double k(point p1,point p2){return (p1.y-p2.y)/(p1.x-p2.x);}int main(){while(cin>>n){for(int i=0;i<n;i++)cin>>p[i].x>>p[i].y;cin>>m;while(m--){bool flag=false;point q;cin>>q.x>>q.y;for(int i=0;i<n;i++){point p1=p[i];point p2=p[(i+1)%n];if(Online(p1,p2,q)){flag=true;break;}if(p1.y!=p2.y&&q.y<=max(p1.y,p2.y)&&q.y>min(p1.y,p2.y)){double x=p1.x+(q.y-p1.y)/k(p1,p2);if(q.x<x) flag=!flag;}}if(flag) cout<<"Yes"<<endl;else cout<<"No"<<endl;}}return 0;}