2013年11月25日星期一(DEMO5-3计算参数化直线和平面交点)

2023-11-06

今天,以3D为主,

仍然一步步地进行。

首先加了个3D参数化直线,类似于参数化2D直线。

 

//参数化D直线

typedef struct PARMLINE3D_TYP

{

 

    POINT3D           p0;      //起点

    POINT3D           p1;      //终点

    VECTOR3D         v;       //方向向量p0->p1

}PARMLINE3D, * PARMLINE3D_PTR;

 

3D点积

float ddraw_math::VECTOR3D_DOT( VECTOR3D_PTR va, VECTOR3D_PTR vb )

{

    return ( ( va->x * vb->x ) + ( va->y * vb->y ) + ( va->z + vb->z ) );

}

增加一个可能:线在平面上

#define  PARM_LINE_INTERSECT_EVERYWHERE     3

 

int ddraw_math::Intersect_Parm_Lines3D_Plane3D(PARMLINE3D_PTR pline, PLANE3D_PTR plane, float * t, POINT3D_PTR pt )

{

    float plane_dot_line               = VECTOR3D_DOT( &pline->v, &plane->n );

    if ( fabs(plane_dot_line) <= EPSILON_E5 )

    {

         if( fabs( Compute_Point_In_Plane3D( & pline->p0, plane ) ) <= EPSILON_E5 )

             return PARM_LINE_INTERSECT_EVERYWHERE;

         else

             return PARM_LINE_NO_INTERSECT;

    }

 

    *t                             = - ( plane->n.x * pline->p0.x +plane->n.y * pline->p0.y +plane->n.z * pline->p0.z - plane->n.x * plane->n.x - plane->n.y * plane->n.y - plane->n.z * plane->n.z ) / plane_dot_line;

 

    pt->x                          = pline->p0.x + pline->v.x * ( *t );

    pt->y                          = pline->p0.y + pline->v.y * ( *t );

    pt->z                          = pline->p0.z + pline->v.z * ( *t );

 

 

 

 

    if ( ( * t >= 0 ) && ( * t <= 1 ) )

    {

         return ( PARM_LINE_INTERSECT_IN_SEGMENT );

    }

    else

    {

         return (PARM_LINE_INTERSECT_OUT_SEGMENT );

    }

}

计算参数形式3D直线

 

void ddraw_math::Compute_Parm_Line3D( PARMLINE3D_PTR p, float t, POINT3D_PTR pt )

{

    pt->x                          = p->p0.x+ p->v.x * t;

    pt->y                          = p->p0.y+ p->v.y * t;

    pt->z                          = p->p0.z+ p->v.z * t;

   

 

 

}

void ddraw_math   ::Init_Parm_Line3D( POINT3D_PTR p_init, POINT3D_PTR p_term, PARMLINE3D_PTR p )

{

    VECTOR3D_INIT( & ( p->p0 ), p_init );

    VECTOR3D_INIT( & ( p->p1), p_term );

    VECTOR3D_Build( p_init, p_term, & ( p->v));

 

}

void ddraw_math::VECTOR3D_Build( VECTOR3D_PTR init, VECTOR3D_PTR term, VECTOR3D_PTR result )

{

    result->x                      = term->x -init->x;

    result->y                      = term->y - init->y;

    result->z                      = term->z - init->z;

}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

2013年11月25日星期一(DEMO5-3计算参数化直线和平面交点) 的相关文章

随机推荐

  • VBA技术资料MF54:VBA_EXCEL实时获取鼠标位置

    分享成果 随喜正能量 若人散乱心 乃至以一花 供养于画像 渐见无数佛 所以发一幅释迦牟尼佛像 与同修善友一起每日在微博上供养 只要有供养之心 便可积累功德 以此回向 愿求者如愿苦者得乐 愿这世界吉祥安乐 愿每颗心充满善念 我给VBA的定义
  • 0.96寸OLED12864显示屏设计方案(原理图+PCB+BOM表+程序)

    一 简介 OLED 屏幕作为一种新型的显示技术 其自身可以发光 亮度 对比度高 功耗低 在当下备受追捧 而在我们正常的显示调整参数过程中 我们越来越多的使用这种屏幕 我们使用的一般是分辨率为 128 64 屏幕尺寸为 0 96 寸 由于其较
  • Python包中__init__.py文件的作用和用法

    在Python工程中 我们经常可以看到带有 init py 文件的目录 在PyCharm中 带有这个文件的目录被认为是Python的包目录 与目录的图标有不一样的显示 如下图所示 链接 dir example是一个空白目录 图标是个文件夹图
  • R.I.P,又一位程序员巨佬——左耳朵耗子陨落

    震惊 谣言吧 求辟谣 默哀 左耳朵耗子 在程序员这个群体里应该属于 GOAT 的存在了 虽然每个人心目中都有自己的 GOAT 但耗子叔的影响力可以说是有目共睹 我也是在技术群刷到这张图片的 相信大多数小伙伴和我一样 震惊 谣言吧 求辟谣 默
  • 用C#语言泛化单件模式

    用C 语言泛化单件模式 本人对于C 只能算是初学者 写此随笔 也只为和大家一起讨论 共同进步 我看到过一些用C 语言泛化单件 Singleton 的文章和代码 里面有个问题 即用new来创建对象 比如类似下面这段代码 if instance
  • 串口接受时有关接受标志位详解

    首先我们来看一下MDK对各位的描述 可以发现0 13位接受的是数据个数 填满相当于十进制的8191 那么既然0 13位数据量这么大 代码是如何实现对14 15位的修改呢 废话不多说 先上实现代码 原子哥编写 void USART1 IRQH
  • 简单的redis集群

    条件 3台主机 也可以1台3实例 redis大版本 5 3 4不太一样 下载安装 提前装好gcc wget http download redis io releases redis 5 0 3 tar gz tar redis 5 0 3
  • Linux 多进程模块化设计 - 主进程守护子进程

    Linux 多进程模块化设计 主进程守护子进程 1 Linux多进程 2 示例 3 总结 1 Linux多进程 fork pid t fork void 复制调用进程 并创建为子进程 wait pid t wait int status 等
  • Java压缩工具(zip)

    压缩包使用说明 public class ZipFileUtils web下载打成压缩包的文件 流方式 param response 响应 param fileList 文件列表 param zipName 压缩包名 public stat
  • python 常用函数和自定义函数整理

    以下函数主要用于记录和保存 方便自己查阅 持续更新 1 3D 图像处理 def numpy2sitk arr sitk ori img numpy转换为sitk sitk img sitk GetImageFromArray arr sit
  • 【MES】MES能为制造企业做什么,解决什么问题?

    导 读 文 e works整理
  • 看完这篇 教你玩转渗透测试靶机vulnhub——FunBox7( EASYENUM)

    Vulnhub靶机FunBox7 EASYENUM 渗透测试详解 Vulnhub靶机介绍 Vulnhub靶机下载 Vulnhub靶机安装 Vulnhub靶机漏洞详解 信息收集 文件上传GetShell sudo mysql 提权 获取fla
  • 原始字符串(Raw String)

    来自 Python宝典 的笔记 1 原始字符串是Python中一类比较特殊的字符串 以大写字母R或者小写字母r开始 在原始字符串中 字符 不再表示转义字符的含义 2 原始字符串是为正则表达式设计的 也可以用来方便地表示Windows系统下的
  • SpringBoot JPA提示:Cannot add or update a child row: a foreign key constraint fails/MySQL :1452 添加外键失败

    问题描述 一个简单的Spring Data JPA应用程序 包含一个树形结构类对象Permission 测试树形结构类型父子关系时 提示如下错误信息 ERROR Cannot add or update a child row a fore
  • idea运行java程序报:java: 错误: 不支持发行版本 5解决

    进入设置 修改编译字节码版本 进入项目结构 修改语言类别 改为你自己对应的jdk版本
  • [USACO18FEB]Snow Boots G【set】

    题目链接 P4269 USACO18FEB Snow Boots G 我们可以按照离线的方式 先进行离散化 然后再看当每个高度的最少需要的距离由此判断答案的可行性 于是可以用两个set 其中一个得是multi 来进行维护 一个维护点坐标 这
  • element-ui的el-form表单一行两个显示效果

    效果图 代码
  • vue指令大全

    vue 是什么 简介型的javascript框架 特点 mvvm m mvc module 模型 v view 视图 c controller 控制器 mvvm m mvc module 模型 v view 视图 vm 视图与数据之间的传递
  • RFC1945 HTTP1.0协议中文版

    版权声明 转载时请以超链接形式标明文章原始出处和作者信息及本声明 http haoren blogbus com logs 182145 html RFC1945 HTTP1 0协议中文版 组织 中国互动出版网 http www china
  • 2013年11月25日星期一(DEMO5-3计算参数化直线和平面交点)

    今天 以3D为主 仍然一步步地进行 首先加了个3D参数化直线 类似于参数化2D直线 参数化D直线 typedef struct PARMLINE3D TYP POINT3D p0 起点 POINT3D p1 终点 VECTOR3D v 方向