图形基础-叉乘

2023-11-05

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Test : MonoBehaviour
{
    public Vector3 point;
    public Transform A;
    public Transform B;
    public Transform C;
    //正弦是sin,余弦是cos.是相对直角三角形来说的,正弦是一个角的对边比斜边,余弦是一个角的临边比斜边。
    //a向量*b向量 = |a|*|b|*cos@
    //当A向量与B向量的夹角为0度时 点乘的值为1;
    //当A B 夹角为90/-90度时,值为0;
    //当A B夹角为180/-180 度时,值为-1;
    float Dot(Vector3 a, Vector3 b) {
        return a.x * b.x + a.y* b.y + a.z * b.z;
    }
    float SqrMagnitude(Vector3 v3) {
        float all = v3.x * v3.x + v3.y * v3.y + v3.z * v3.z; //Mathf.Pow
        return Mathf.Sqrt(all);
    }
    // Update is called once per frame
    void Update()
    {
        
        Debug.Log(A.forward);
        Debug.Log("长度"+SqrMagnitude(A.position) +"api:"+ A.position.magnitude);
        Debug.DrawLine(Vector3.zero, A.position, Color.red);
        Debug.DrawLine(Vector3.zero, B.position, Color.blue);
        Debug.Log("点乘:" + Dot(A.position, B.position) +"api:"+Vector3.Dot(A.position, B.position));
        Debug.DrawLine(Vector3.zero,A.position.normalized , Color.yellow); //归一化
        Debug.Log("夹角:" + Vector3.Angle(A.position, B.position) +":"+ Dot(A.position, B.position) /(A.position.magnitude * B.position.magnitude));

        CheckFire(A.position, B.position);
    }
    //可判断物体之间的夹角,在做攻击范围检测时使用,例如:玩家向前劈砍动作,而劈砍的范围为-45度到45度,长度为2,如图所示:

    void CheckFire(Vector3 a, Vector3 b) {
        //首先判断距离是否小于攻击距离2,然后判断角度:
        //if (Vector3.Distance(a, b) < 2) return;

        //使用 点乘进行角度判断(B.position - A.position)作用 是 B的左边转化为相对A。 默认是相对原点
        float cosValue = Vector3.Dot(A.forward.normalized, (B.position - A.position).normalized);

        //Mathf.Acos 返回 f 的反余弦 - 其余弦为 f 的角度(以弧度为单位)。
        //Mathf.Rad2Deg弧度到度换算常量 == 360 / (PI * 2)
        Debug.Log(Mathf.Acos(cosValue) * Mathf.Rad2Deg + "  "+ cosValue);
        //如果大于0说明敌人在自身前面
        // 如果小于0说明敌人在自身后面
        // 如果等于0说明敌人在自身左右

    }
}

    //void Run()
    //{
    //    //点哪去哪
    //    if (Input.GetMouseButtonDown(0))
    //    {
    //        Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
    //        RaycastHit hit;
    //        if (Physics.Raycast(ray, out hit))
    //        {
    //            if (hit.collider.gameObject.name.Equals("ditu"))
    //            {
    //                target = hit.point;
    //            }
    //        }
    //    }
    //    //移动
    //    A.transform.position = Vector3.Lerp(A.transform.position, target, Time.deltaTime * 10);
    //    B.transform.position = Vector3.Lerp(B.transform.position, A.transform.position, Time.deltaTime*0.5f);
    //    XuanZhuan();
    //}
    //void XuanZhuan() {
    //    Vector3 relativePosition = A.position - B.position; //目标点减去起始点(要作用的点)。
    //    Vector3 result = Vector3.Cross(B.forward, relativePosition); //
    //    //叉乘结果判断从哪个方向旋转
    //    Vector3 axis;
    //    if (result.y > 0)
    //    {
    //        axis = Vector3.up;
    //    }
    //    else {
    //        axis = Vector3.down;
    //    }
        
    //    float current = Vector3.Angle(B.forward, A.position - B.position);
    //    if (current > 5 || current < -5)
    //    {
    //        B.Rotate(axis, current*Time.deltaTime *10,Space.World);
    //    }
    //}

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

图形基础-叉乘 的相关文章

  • 如何减少项目在Corona和V-Ray中的3ds Max渲染时间?

    相信在大多 3D 项目里 渲染是最耗费时间的部分 它不仅是建模和纹理化 3D 场景的过程 而是需要利用硬件来完成任务 我们在配备独立GPU和带有2到4个强大内核的CPU的中档计算机上 可以将3ds Max中创建和处理的项目轻松渲染完成 因为
  • Vulkan-实践第一弹

    上一篇文章中 我们浅析了Vulkan对传统图形API的优势 主要就是在其性能和精细化操控GPU上 具体可参考Vulkan 性能及精细化 今天我们就来用个简单的例子 亲身感受下Vulkan的开发 魅力 include
  • 计算机图形学games101作业二 ---- 三角形光栅化 超采样抗锯齿 黑边处理

    games101作业二 三角形光栅化 超采样抗锯齿 黑边处理 本文是在学习计算机图形学时根据课程作业进行整理的笔记 有错误请指出 如果是同课程 请勿复制粘贴 谢谢 文章目录 CG homework1 0 本次作业 实现函数及简单描述 详细
  • 光照 (4) 镜面光贴图示例

    通过使用镜面光贴图我们可以可以对物体设置大量的细节 比如物体的哪些部分需要有闪闪发光的属性 我们甚至可以设置它们对应的强度 镜面光贴图能够在漫反射贴图之上给予我们更高一层的控制 step1 对镜面光贴图使用一个不同的纹理单元 见纹理 在渲染
  • Games101:作业3(管线分析、深度插值、libpng warning、双线性插值等)

    目录 0 作业介绍 1 0 0 管线分析 1 1 0 main函数 1 2 0 draw函数 1 3 0 rasterizer triangle函数 1 3 1 重心坐标 computeBarycentric2D 1 3 2 深度插值 2
  • 广西高等教育学会高校教育技术委员会莅临瑞云科技考察交流

    2023年3月18日上午11点整 广西高等教育学会高校教育技术专业委员会组织了一批来自广西各院校的专家老师 来到深圳市瑞云科技股份有限公司 以下简称瑞云科技 参观考察 瑞云科技是一家专注为视觉行业提供垂直云计算服务的公司 用户超20万 遍及
  • Qt-OpenGL-03 纹理Texture

    写在开头 文章是基于纹理 LearnOpenGL CN 教程的学习记录 强烈建议在网站上先弄清楚原理再看此文章 以Qt GL窗口代替GLFW的写法 Qt库中一些类代替教程中的类 一起入坑 效果图 上图使用了两纹理混合 接下来是一些比较重要的
  • Vulkan基础

    目录 一 Vulkan开发理论基础知识 接口设计理念 Host Device 基础设施 元数据和设备 基础设施 交换链 编辑交换链 SwapChain 编辑 渲染管线 Pipeline RenderPass CommandBuffer 二
  • OpenGL之Shader编程入门

    1 shader 编程基础 1 1 Vertex shader与Fragment shader Vertex shader即顶点着色器 用来改变顶点的属性 Fragment shader即片元着色器 用来改变片元的颜色 在Direct3D中
  • 光照 (5) 光照贴图

    物体在不同的部件上都有不同的材质属性 1 1 漫反射 允许我们对物体的漫反射分量 以及间接地对环境光分量 它们几乎总是一样的 和镜面光分量有着更精确的控制 漫反射贴图 Diffuse Map 使用一张覆盖物体的图像 让我们能够逐片段索引其独
  • Turbo跨平台开源渲染引擎

    Turbo跨平台开源渲染引擎 基于Vulkan开发的跨平台渲染引擎 欢迎来参观 使用 提意见 o o Turbo开源引擎地址 Turbo开源引擎开发记录视频
  • 【OpenGL】笔记五、纹理

    1 流程 1 1 单个纹理 纹理是一个2D图片 甚至也有1D和3D的纹理 它可以用来添加物体的细节 为了能够使用纹理图片 我们需要一个叫做stb image h的头文件库来加载不同格式的图片作为纹理 全部文件 得到该头文件后 加入项目 并且
  • 内推几何建模与图形渲染职位

    最近 可能也会是长期的 公司在大力招兵买马 急缺几何 图形方面的人才 初级 高级 专家或有致力于图形领域方面开发都欢迎 当然其他方面的也有 包括BIM相关的开发 可直接内推 具体职位列表如下 薪资open可谈 坐标 上海 深圳 武汉三地均可
  • 2021年 IEEE VIS 科学可视化与体渲染论文整理与分析

    因为最近工作的关系 需要研究一下IEEE VIS中2017年以后的与我之前主要方向 体渲染 医学可视化 有关的论文 我把这些年全部的论文进行了筛选和梳理 总共筛选出57篇论文 打算写一个文章来记录这些内容 这个栏目是2021年的九篇论文的介
  • 3DMax 不断崩溃,常见的5种处理方案!

    Autodesk 3DS Max 是一种流行的 3D 建模和动画软件 被图形设计和游戏行业的许多专业人士使用 但是 与任何其他软件一样 用户会遇到崩溃问题 本文列出了 5种常见的解决方案 用于排除故障并解决 3DS Max 崩溃问题 Aut
  • DirectX12 3D游戏开发实践(龙书)第四章 Direct3D的初始化

    目录 Direct3D的初始化 预备知识 Direct3D概述 组件对象模型 纹理格式 Textures Formats 交换链和页面翻转 深度缓冲 资源与描述符 多重采样技术的原理 利用Direct3D进行多重采样 功能级别 Direct
  • 如何渲染精美3D PCB图

    简介 现在网上大部分PCB渲染方法都比较麻烦 并且会有丝印不清晰 或者走线与铜皮不显现问题 现在分享一种简单有效的PCB渲染方法 图为渲染效果图 工具或材料 AD keyshot 一个带3D封装图的PCB文件 具体步骤 1 AD端操作 在P
  • GLSL (3)输入和输出

    1 in和out 着色器使用in和out两个关键字设定输入和输出 只要一个输出变量与下一个着色器阶段的输入匹配 它就会传递下去 既是一个着色器向另一个着色器发送数据 我们必须在发送方着色器中声明一个输出 在接收方着色器中声明一个类似的输入
  • 柏林噪声(Perlin Noise) 介绍及应用

    什么是噪声 信号处理中一般指原信号中不存在的无规则的额外信号 在处理过程中一般是我们不需要的 需要被处理掉的 噪声和信号本身无关 其频率和强弱变化无规律 噪声有什么用处 就如上面提到的那样 噪声是干扰原信号的存在 在信号处理中 我们一般都希
  • 3D图形渲染技术

    如何用2D平面展现3D图形 2D图形 在一个平面中有了两个点 知道了他们的XY坐标 就可以把它们链接起来画成一条线 通过控制A和B点的XY坐标可以控制一条线 在3D图像中 点的坐标多了一个Z轴的坐标系 但是在2D的屏幕坐标上不可能有XYZ立

随机推荐

  • c:forEach status.index 行索引的使用

    使用seam做了个项目 展示一个自定义列表输出 分别定义表格标题List headerList和数据List
  • 浅谈云计算的三种服务模式:IaaS,PaaS和SaaS

    2008年 云计算的概念由Google率先提出 短时间内其核心理念在全球范围内迅速传播并发展 2010年在国内形成趋势 各大IT互联网商业巨头将目光聚焦在云计算 至目前 云计算在中国已经慢慢开始成熟起来 云计算指的是通过网络 云 将巨大的数
  • python从入门到精通——完整教程【转载】

    文章目录 一 pycharm下载安装 二 python下载安装 三 pycharm上配置python 四 配置镜像源让你下载嗖嗖的快 4 1 pycharm内部配置 4 2 手动添加镜像源 4 3 永久配置镜像源 五 插件安装 比如汉化 5
  • ios逆向(二)frida-ios-dump一键砸壳详细版

    写在前面 本教程为本人实际操作记录 在此感谢庆哥官方 一条命令完成砸壳 github frida ios dump ios端配置 打开cydia 添加源 https build frida re 打开刚刚添加的源 安装 frida 安装完成
  • 注册表关闭windows安全中心_关闭win10自动更新的三个小妙招,再也不用被自动下载更新打扰了...

    对于Windows 10操作系统 微软默认设置为自动下载并安装Windows 以确保系统正常运行并保持其安全性 但是在某些情况下 需要关闭Windows 10更新或在Windows 10上禁用自动更新安装 这该如何办呢 本文目录 关于Win
  • Linux系统中文件查找find函数用法

    find name april 在当前目录下查找以april开始的文件 find name april fprint file 在当前目录下查找以april开始的文件 并把结果输出到file中 find name ap o name may
  • JAVA导入txt文件并按行读取内容封装成实体以及导出下载

    业务背景 前台页面支持用户上传txt类型的文件 用做一些服务的配置 我们需求将改文件解析 读取里面的内容 并封装成接口参数 再调第三方接口 上代码 PostMapping uploadHost RequiresRoles admin pub
  • p9plus升级鸿蒙教程,华为P9 Plus(VIE-AL10 全网通 EMUI 5.0)一键ROOT图文详解教程

    伴随着安卓刷机越来越流行 很多安卓用户都喜欢上了这种可以自定个性系统的行为 那么华为P9 Plus VIE AL10 全网通 EMUI 5 0 怎么获取ROOT权限 华为P9 Plus VIE AL10 全网通 EMUI 5 0 一ROOT
  • IMEI、IMSI、ICCID、SN是什么?意义和区别?通信模组或手机的唯一识别码

    最近在做几个4G移动端的产品 初入行门有很多生涩的名词 想获取一个全球唯一ID作为设备后台管理编号 就扯出了 IMEI IMSI ICCID SN 这几个东西 IMEI IMEI 国际移动设备识别码 International Mobile
  • 如何正确理解三极管的放大区、饱和区、截止区

    作为电子初学者来说 模拟电路非常重要 模拟电路的三极管的应用是重中之重 能正确理解三极管的放大区 饱和区 截止区是理解三极管的标志 很多初学者都会认为三极管是两个 PN 结的简单凑合 如下图 这种想法是错误的 两个二极管的组合不能形成一个三
  • 多线程和高并发介绍

    多线程和高并发介绍 文章目录 多线程和高并发介绍 前言 一 什么是多线程 1 多线程介绍 2 多线程实现原理 3 白话文解释多线程 4 多线程存在的问题 二 什么是高并发 1 高并发介绍 2 如何提升系统的并发能力 三 多线程和高并发 总结
  • es6对象多层解构、数组解构

    对象类 基础对象解构 const obj a 1 b 2 c 3 const a b c obj console log a b c 1 2 3 多层对象解构 const obj a 1 b 2 c 3 d d1 4 const a b c
  • qt调用Linux脚本范例,QT下实现对Linux Shell调用的几种方法

    使用QProcess QThread include int main QProcess execute ls return 0 QProcess poc new QProcess poc gt start ping 222 207 53
  • [极客大挑战 2019]Knife

    极客大挑战 2019 Knife 主界面 很显然 题目已经内置了一个一句话木马 我们只需要用蚁剑连接即可 但是我在连接蚁剑时报错了 错误如下 经过搜索 原来是开启了手动代理模式 在菜单中关闭即可 更改后成功进入 在根目录下找到flag文件
  • 20050405:什么都要会啊

    为了要修补门户的页面 今天学会了三样 怎么用Photoshop切割图片并存入网页 怎么用DW在表格中平铺背景图片 在么用Tomcat部署网站 真的是什么都要会啊 今天下午在漫网论坛上发了封贴子 晚上却被删了 原贴如下 关于日本动漫中女性角色
  • C 语言实现简单有限状态机

    简介 常说的状态机是有限状态机 FSM 是表示有限个状态以及在这些状态之间的转移和动作等行为的数学计算模型 三个特征 状态总数 state 是有限的 任一时刻 只处在一种状态之中 某种条件下 会从一种状态转变 transition 到另一种
  • KVM快照

    KVM快照就是将虚拟机在某一个时间点上的磁盘内容 全部 或部分 内存和设备状态保存一下 以备将来恢复之用 一 内存状态快照 只是保持内存和虚机使用的其它资源的状态 如果虚机状态快照在做和恢复之间磁盘没有被修改 那么虚机将保持一个持续的状态
  • 不安装Visual Studio,只用Windows SDK搭建VC环境

    首先你需要下载的是 Microsoft Windows SDK for Windows 7 and NET Framework 4 下载以后你得到的是一个网络安装文件 确保网络的连接 安装Windows SDK 7 1 注意得到的Windo
  • git的分支

    1 master主分支 在初始化本地Git仓库的时候 Git默认已经帮我们创建了一个名字叫做master的分支 通常我们把这个master分支叫做主分支 在实际工作中 master主分支的作用是 用来保存和记录整个项目已完成的功能代码 因此
  • 图形基础-叉乘

    using System Collections using System Collections Generic using UnityEngine public class Test MonoBehaviour public Vecto