@darkproject
2019-10-25T14:16:50.000000Z
字数 2566
阅读 1075
智商恢复
恢复
被虐的最惨的一次吧,当时并不知道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-6
using 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-6
using 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-8
const 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;
}