C++图形学之线性插值
来源:互联网 发布:php require use 编辑:程序博客网 时间:2024/04/25 16:23
原文链接
// 图形学线性插值:已知三角形三个顶点的坐标以及需要插入的点P,首先判断P是否在三角形内,然后求解权重。#include <iostream>#include <math.h>const double eps = 1e-6;using namespace std;struct node{ double x, y; double w;}p[5];double dis(node A,node B){ return sqrt(pow((A.x - B.x), 2) + pow((A.y-B.y),2));}bool equ(double A, double B){ if (fabs(A - B) < eps) return true; return false;}//由边长求面积double area(node A,node B, node C){ double len1 = dis(A, B), len2 = dis(B, C),len3 = dis(A,C); double p = (len1 + len2 + len3) / 2; return sqrt(p*(p-len1)*(p-len2)*(p-len3));}int main(int argc, char *argv[]){ /* 前三行每行包括三个浮点数,分别是x,y,w,表示(x,y)这个坐标的三角顶点权重为w 第四行包括两个浮点数,分别是x,y,表示需要计算的插值点坐标。 0 <= x,y,w <= 100 输入:0 0 0 0 1 1 1 0 2 0.25 0.25 输出:0.75 0 0 0 0 1 1 1 0 2 2 2 输出:-1 */ while (cin >> p[0].x >> p[0].y >> p[0].w) { for (int i = 1; i < 3; i++) { cin >> p[i].x >> p[i].y >> p[i].w; } cin >> p[3].x >> p[3].y; //第三个点 for (int i = 3; i >= 0; i--) { p[i].x -= p[0].x; p[i].y -= p[0].y; } //判断插值点是否在三角形内部 if (equ(area(p[0],p[1],p[2]),area(p[0],p[1],p[3])+area(p[0],p[2],p[3])+area(p[1],p[2],p[3])) == false) { cout << "-1" << endl; continue; }#if 0 double B = (p[1].x*p[3].y - p[3].x*p[1].y) / (p[1].x*p[2].y - p[2].x*p[1].y); double A; if (equ(p[1].x, 0) == false) A = (p[3].x - B*p[2].x) / p[1].x; else A = (p[3].y - B*p[2].y) / p[1].y; printf("%.2f\n", A*p[1].w + B*p[2].w + (1.0 - A - B)*p[0].w);#else /* p[3].x = (1-B-A)*p[0].x + B*p[1].x + A*p[2].x p[3].y = (1-B-A)*p[0].y + B*p[1].y + A*p[2].y 求解 */ double B = (p[3].x*p[2].y - p[2].x*p[3].y) / (p[1].x*p[2].y - p[2].x*p[1].y); double A; if (equ(p[2].x, 0) == false) A = (p[3].x - B*p[1].x) / p[2].x; else A = (p[3].y - B*p[1].y) / p[2].y; printf("%.2f\n", A*p[2].w + B*p[1].w + (1.0 - A - B)*p[0].w);#endif } return 0;}
1 0
- C++图形学之线性插值
- 线性插值 C实现
- 线性插值 c代码.....
- 线性插值之双线性插值与三线性插值
- 算法之线性插值原理
- 线性插值
- 线性插值
- 线性插值
- Unity之Vector3.Lerp线性插值原理介绍
- “那些”题之图形学
- 图形学之腐蚀膨胀
- [C]计算机图形学实验三
- 【图像缩放篇之三】三次线性插值和MipMap链
- 图像处理之线性插值旋转算法(biline-interpolation rotate algorithm)
- 数值分析之 拉格朗日插值、牛顿插值、分段线性插值实现
- 前沿讲座之计算机图形学
- 图形学基础复习之矩阵
- 计算机图形学之画线算法
- UNIX再学习 -- 信号处理
- Maven Wrapper
- VirtualBox安装VBoxLinuxAdditions错误:unable to find the sources of your current linux kernel
- cloudera add host
- 后台时间控件,用js动态加载时,要初始化——项目问题
- C++图形学之线性插值
- 诶呀 居然可以写微博了 哈哈哈
- python数据分析学习笔记十
- Android Studio 打开源码项目,配置启动运行
- QPushButton的鼠标事件处理及EventFilter事件过滤器的用法
- 树莓派Debian支持ll
- DapperLambda发布
- python数据分析学习笔记九
- jquery Ajax操作