【Unity每日一记】WheelColider组件汽车游戏的关键

news2024/12/23 5:02:27

在这里插入图片描述


👨‍💻个人主页:@元宇宙-秩沅

👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅!

👨‍💻 本文由 秩沅 原创

👨‍💻 收录于专栏unity每日一记

🅰️推荐文章


⭐【软件设计师高频考点暴击】

⭐【Unityc#专题篇】之c#系统化大礼包】

⭐【unity数据持久化】数据管理类_PlayerPrfs

⭐【unity本站最全系列】unity常用API大全一篇文章足以


WheelColiderz组件汽车游戏的关键

在这里插入图片描述


文章目录

    • 🅰️推荐文章
    • WheelColiderz组件汽车游戏的关键
    • 🎶(==A==) 关键API知识
    • 🎶(==B==) 参数一览
    • 🎶(==C==) 扭矩力
    • 🎶(==D==) 阿克曼转向
    • 🎶(==E==) 汽车下压力
    • 🎶(==F==) 汽车质心
    • 🎶(==G==) 发动机相关
    • 🎶(==H==) 自动挡位变速箱
    • 🅰️系统路线学习点击跳转
  • 四最终代码
    • CarMoveContorl
    • CameraFllow
    • InputMana



🎶(A 关键API知识


API解释
motorTorque扭矩力:
brakeTorque制动扭矩:刹车
Radius碰撞器车轮半径
Wheel Damping rate车轮阻尼率
GetWorldPose(out wheelPosition, out wheelRotation);获取碰撞器当前的空间位置和空间角度。
steerAngle车轮碰撞器的转向。
GetGroundHit车轮的地面碰撞数据。
rpm当前轮轴转速(以每分钟转数为单位)。
isGrounded车轮是否在空中(只读)
WheelHit参数说明
colliderT另一个碰撞机的轮子正在撞击。
force施加在接触上的力的大小。
forwardDir滚轮指向的方向。.
forwardSlip轮胎在滚动方向上打滑。加速滑移为负,制动滑为正
normal接触点的正常。.
pointT车轮与地面之间的接触点。
sidewaysDir车轮的侧向方向。l.
sidewaysSlip侧身滑 轮胎向侧向打滑。.
rpm当前轮轴转速(以每分钟转数为单位)。(只读).

🎶(B 参数一览


在这里插入图片描述


🎶(C 扭矩力


知识百科:什么是扭矩力?
扭矩是指发动机运转时从曲轴端输出的平均力矩,俗称为发动机的“转劲”,是 发动机性能 的一个重要参数,扭矩越大,发动机输出的“劲”越大,曲轴转速的变化也越快,汽车的爬坡能力、起步速度和加速性也越好。


🎶(D 阿克曼转向


引用:阿克曼转向是一种现代汽车的转向方式,也是移动机器人的一种运动模式,在汽车转弯的时候,内外轮转过的角度不一样,内侧轮胎转弯半径小于外侧轮胎

  • 后轮距尺寸设置为1.5f ,轴距设置为2.55f ,radius 默认为6,radius 越大旋转的角度看起来越小
 if (horizontal > 0 ) {
//后轮距尺寸设置为1.5f ,轴距设置为2.55f ,radius 默认为6,radius 越大旋转的角度看起来越小
            wheels[0].steerAngle = Mathf.Rad2Deg * Mathf.Atan(2.55f / (radius + (1.5f / 2))) * horizontal;
            wheels[1].steerAngle = Mathf.Rad2Deg * Mathf.Atan(2.55f / (radius - (1.5f / 2))) * horizontal;
        } else if (horizontal < 0 ) {                                                          
            wheels[0].steerAngle = Mathf.Rad2Deg * Mathf.Atan(2.55f / (radius - (1.5f / 2))) * horizontal;
            wheels[1].steerAngle = Mathf.Rad2Deg * Mathf.Atan(2.55f / (radius + (1.5f / 2))) * horizontal;

        } else {
            wheels[0].steerAngle =0;
            wheels[1].steerAngle =0;
        }

🎶(E 汽车下压力


知识百科: 什么是下压力
下压力是车在行进中空气在车体上下流速不一产生的,使空气的总压力指向地面从而增加车的抓地力.

速度越大,下压力越大,抓地更强,越不易翻车
在这里插入图片描述

  • 关键代码
  //-------------下压力添加-----------------

        //速度越大,下压力越大,抓地更强
        rigidbody.AddForce(-transform.up * downForceValue * rigidbody.velocity .magnitude );

🎶(F 汽车质心


知识百科:什么是质心?——质量中心
汽车制造商在设计汽车时会考虑质心的位置和重心高度,以尽可能减小质心侧偏角。 一些高性能汽车甚至会采用主动悬挂系统来控制车身侧倾,从而减小质心侧偏角,提高车辆的稳定性和操控性。


🎶(G 发动机相关


发动机功率=扭矩转速n

知识百科:说到汽车发动机,要了解几个参数。排量,功率,扭矩,转速。那么这里和参数之间的关系如何,
排量,就是发动机气缸排出气体的多少。因此说到排量,不管四缸,三缸,二缸,一缸,只要大小一样,排量就相同。
功率,单位时间内做功的多少。那么排量越大,单位时间做功就会越多,因此,排量越大,功率也会越大。
扭矩,它的单位是N·M,所以它是力运动单位距离的结果。它反应的是加速度。扭矩越大,加速能力就越强。
转速,它是单位时间内齿轮转动的圈数。齿轮转的越快,传输给轮胎的转速就越高,车子就跑的越快。
在这里插入图片描述

//汽车引擎发动机相关
    public void CarEnginePower()
    {
        WheelRPM();//将轮轴的转速获取

        // 扭矩力(发动机功率) =  功率=扭矩*转速*n

        motorflaot = -enginePowerCurve.Evaluate(engineRPM) * gears[gerrsNurrentNum];
        float velocity = 0.0f;

        //发动机的转速 与 车轮转速 和 挡位比率 成比例

        engineRPM = Mathf.SmoothDamp(engineRPM, 1000 + Mathf.Abs (wheelsRPM) * 3.6f * (gears[gerrsNurrentNum]), ref velocity, smoothTime);
        print(engineRPM);

        VerticalContorl();    //驱动管理

        shifterGearsChange(); //换挡管理
    }

    //获得车轮的转速
    public void WheelRPM()
    {
        float sum = 0;
        for (int i = 0; i < 4; i++)
        {
            sum += wheels[i].rpm;
        }
        //四个车轮轮轴的平均转速
        wheelsRPM = sum / 4;
    }

    //换挡管理
    public void shifterGearsChange()
    {
        if(InputManager.InputManagerment .addGears ) //如果按下E键,加挡
        {
            if(gerrsNurrentNum < gears.Length - 1  )

            gerrsNurrentNum++;
        }
        if(InputManager.InputManagerment.lowGears ) //如果按下Q键,减档
        {
            if (gerrsNurrentNum > 0)

                gerrsNurrentNum--;
        }

    }

🎶(H 自动挡位变速箱


在这里插入图片描述

不仅仅是发动机牵引着汽车去运动。是发动机跟轮胎一起控制汽车去前进,我们前面没有添加发动机,就是靠轮胎的扭矩力去控制汽车的前进

在这里插入图片描述

怎么来理解自动档位变速箱呢?当发动机。每个档位的发动机。它超过八千转的时候就要换挡了。所以当我们现在设置发动机的最大转是八千,最小转是五千,超过八千转我们就自动加档。小于了五千转,我们就自动减档。——这个最大转和最小转是模拟跑车的。

当然,判断换挡的依据不仅仅是靠超过最大的这个发动机的最大转,连同每个档位设置的那个限速作为一起判断依据。如下图所示,每个档位的限速如果超过了这个限速,并且超过了最大转速,我们就换挡。

在这里插入图片描述


  //换挡管理
  //换挡管理
    public void shifterGearsChange()
    {
        switch (nowGearsType)
        {
            //档位类型是手动档的时候
            case EChooseGreas.handMovement:

                if (InputManager.InputManagerment.addGears) //如果按下E键,加挡
                {
                    if (gerrsNurrentNum < gears.Length - 1)

                        gerrsNurrentNum++;
                }
                if (InputManager.InputManagerment.lowGears) //如果按下Q键,减档
                {
                    if (gerrsNurrentNum > 0)

                        gerrsNurrentNum--;
                }
                break;

            //档位类型是自动档的时候handMovement
            case EChooseGreas.aotomutic:

                //如果车子不在地面不会自动换档

                if (!IsGrounp()) return;

                //当发动机转速大于最高转速 并且 速度也超过了相应挡位的限速 ,数组不越界 并且不是倒车 就加档

                if (engineRPM > maxRPM && Km_H >= gearSpeed[gerrsNurrentNum] && gerrsNurrentNum < gears.Length - 1 && !BackCar())
                    gerrsNurrentNum++;

                //当发动机小于最小转时 减档 (此时未加判断是因为就是要 更好的减速)

                if (engineRPM < minRPM && gerrsNurrentNum > 0)
                    gerrsNurrentNum--;
                break;

            default:
                break;
        }

🅰️系统路线学习点击跳转


⭐【Unityc#专题篇】之c#进阶篇】

⭐【Unityc#专题篇】之c#核心篇】

⭐【Unityc#专题篇】之c#基础篇】

⭐【Unity-c#专题篇】之c#入门篇】

【Unityc#专题篇】—进阶章题单实践练习

⭐【Unityc#专题篇】—基础章题单实践练习

【Unityc#专题篇】—核心章题单实践练习


你们的点赞👍 收藏⭐ 留言📝 关注✅是我持续创作,输出优质内容的最大动力!


在这里插入图片描述


四最终代码

在这里插入图片描述

CarMoveContorl

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//-------------------------------------
//—————————————————————————————————————
//___________项目:       ______________
//___________功能:  车轮的运动
//___________创建者:_______秩沅________
//_____________________________________
//-------------------------------------

//驱动模式的选择
public enum EDriveType
{
    frontDrive,   //前轮驱动
    backDrive,    //后轮驱动
    allDrive      //四驱
}


public class CarMoveControl : MonoBehaviour
{
    //-------------------------------------------
    //四个轮子的碰撞器
    public WheelCollider[] wheels ;

    //网格的获取
    public GameObject[] wheelMesh;
 
    //初始化三维向量和四元数
    private Vector3 wheelPosition = Vector3.zero;
    private Quaternion wheelRotation = Quaternion.identity;
    //-------------------------------------------

    //驱动模式选择 _默认前驱
    public EDriveType DriveType = EDriveType.frontDrive;

    //----------车辆属性特征-----------------------

    //车刚体
    public Rigidbody rigidbody;
    //轮半径
    public float radius = 0.25f;
    //扭矩力度
    public float motorflaot = 8000f;
    //刹车力
    public float brakVualue = 800000f;
    //速度:每小时多少公里
    public int Km_H;
    //下压力
    public float downForceValue = 1000f; 

    //四个轮胎扭矩力的大小
    public float f_right;
    public float f_left;
    public float b_right;
    public float b_left;

    //车轮打滑参数识别
    public float[] slip ;

    //质心
    public Vector3 CenterMass;

    //一些属性的初始化
    private void Start()
    {
        rigidbody = GetComponent<Rigidbody>();
        slip = new float[4];

     }

    private void FixedUpdate()
    {
        VerticalAttribute();//车辆物理属性管理

        WheelsAnimation(); //车轮动画

        VerticalContorl(); //驱动管理

        HorizontalContolr(); //转向管理

        HandbrakControl(); //手刹管理


    }

    //车辆物理属性相关
    public void VerticalAttribute()
    {
        //---------------速度实时---------------
        //1m/s = 3.6km/h
        Km_H =(int)(rigidbody.velocity.magnitude * 3.6) ;
        Km_H = Mathf.Clamp( Km_H,0, 200 );   //油门速度为 0 到 200 Km/H之间

        //--------------扭矩力实时---------------
        //显示每个轮胎的扭矩
        f_right = wheels[0].motorTorque;
        f_left  = wheels[1].motorTorque;
        b_right = wheels[2].motorTorque;
        b_left  = wheels[3].motorTorque;

        //-------------下压力添加-----------------

        //速度越大,下压力越大,抓地更强
        rigidbody.AddForce(-transform.up * downForceValue * rigidbody.velocity .magnitude );

        //-------------质量中心同步----------------

        //质量中心越贴下,越不容易翻
        rigidbody.centerOfMass = CenterMass;
    }

    //垂直轴方向运动管理(驱动管理)
    public void VerticalContorl()
    {

        switch (DriveType)
        {
            case EDriveType.frontDrive: 
                //选择前驱
                if (InputManager.InputManagerment.vertical != 0) //当按下WS键时生效
                {
                    for (int i = 0; i < wheels.Length - 2; i++)
                    {
                        //扭矩力度
                        wheels[i].motorTorque = InputManager.InputManagerment.vertical *(motorflaot / 2); //扭矩马力归半
                    }
                }
                else
                {
                    for (int i = 0; i < wheels.Length - 2; i++)
                    {
                        //扭矩力度
                        wheels[i].motorTorque = 0; 
                    }
                }
                break;
            case EDriveType.backDrive:
                //选择后驱
                if (InputManager.InputManagerment.vertical != 0) //当按下WS键时生效
                {
                    for (int i = 2; i < wheels.Length; i++)
                    {
                        //扭矩力度
                        wheels[i].motorTorque = InputManager.InputManagerment.vertical * (motorflaot / 2); //扭矩马力归半
                    }
                }
                else
                {
                    for (int i = 2; i < wheels.Length ; i++)
                    {
                        //扭矩力度
                        wheels[i].motorTorque = 0;
                    }
                }
                break;
            case EDriveType.allDrive:
                //选择四驱
                if (InputManager.InputManagerment.vertical != 0) //当按下WS键时生效
                {
                    for (int i = 0; i < wheels.Length; i++)
                    {
                        //扭矩力度
                        wheels[i].motorTorque = InputManager.InputManagerment.vertical * ( motorflaot / 4 ); //扭矩马力/4
                    }
                }
                else
                {
                    for (int i = 0; i < wheels.Length; i++)
                    {
                        //扭矩力度
                        wheels[i].motorTorque = 0;
                    }
                }
                break;
            default:
                break;
        }

       

    }

    //水平轴方向运动管理(转向管理)
    public void HorizontalContolr()
    {
  

        if (InputManager.InputManagerment.horizontal > 0)
        {
            //后轮距尺寸设置为1.5f ,轴距设置为2.55f ,radius 默认为6,radius 越大旋转的角度看起来越小
            wheels[0].steerAngle = Mathf.Rad2Deg * Mathf.Atan(2.55f / (radius + (1.5f / 2))) * InputManager.InputManagerment.horizontal;
            wheels[1].steerAngle = Mathf.Rad2Deg * Mathf.Atan(2.55f / (radius - (1.5f / 2))) * InputManager.InputManagerment.horizontal;
        }
        else if (InputManager.InputManagerment.horizontal < 0)
        {
            wheels[0].steerAngle = Mathf.Rad2Deg * Mathf.Atan(2.55f / (radius - (1.5f / 2))) * InputManager.InputManagerment.horizontal;
            wheels[1].steerAngle = Mathf.Rad2Deg * Mathf.Atan(2.55f / (radius + (1.5f / 2))) * InputManager.InputManagerment.horizontal;
       
        }
        else
        {
            wheels[0].steerAngle = 0;
            wheels[1].steerAngle = 0;
        }

    }

    //手刹管理
    public void HandbrakControl()
    {
        if(InputManager.InputManagerment .handbanl )
        {
            //后轮刹车
            wheels[2].brakeTorque  = brakVualue;
            wheels[3].brakeTorque  = brakVualue;
        }
        else
        {
            wheels[2].brakeTorque = 0;
            wheels[3].brakeTorque = 0;
        }

        //------------刹车效果平滑度显示------------

        for (int i = 0; i < slip.Length; i++)
        {
            WheelHit wheelhit;

            wheels[i].GetGroundHit(out wheelhit);

            slip[i] = wheelhit.forwardSlip; //轮胎在滚动方向上打滑。加速滑移为负,制动滑为正
        }
        

    }


    //车轮动画相关
    public  void WheelsAnimation()
    {
        for (int i = 0; i < wheels.Length ; i++)
        {
            //获取当前空间的车轮位置 和 角度
            wheels[i].GetWorldPose(out wheelPosition, out wheelRotation);

            //赋值给
            wheelMesh[i].transform.position = wheelPosition;
            
            wheelMesh[i].transform.rotation = wheelRotation * Quaternion .AngleAxis (90,Vector3 .forward );
           
        }
        
    }
}

CameraFllow

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//-------------------------------------
//—————————————————————————————————————
//___________项目:       ______________
//___________功能: 相机的跟随
//___________创建者:秩沅_______________
//_____________________________________
//-------------------------------------
public class CameraFllow : MonoBehaviour
{
    //目标物体
    public Transform target;
    private CarMoveControl Control;
    public int  speed;

    //鼠标滑轮的速度
    public float ScrollSpeed = 45f;

    //Y轴差距参数
    public float Ydictance = 0f; 
    public float  Ymin = 0f;
    public float  Ymax  = 4f;

    //Z轴差距参数
    public float Zdictance = 4f;
    public float Zmin = 4f;
    public float Zmax = 8f;

    //相机看向的角度 和最終位置
    public float angle = -25 ;
    public Vector3 lookPosition;

    void LateUpdate()
    {
        //Z轴和Y轴的距离和鼠标滑轮联系

        Ydictance += Input.GetAxis("Mouse ScrollWheel") * ScrollSpeed * Time.deltaTime;//平滑效果
        Zdictance += Input.GetAxis("Mouse ScrollWheel") * ScrollSpeed * Time.deltaTime;

        //設置Y軸和x轴的滚轮滑动范围 
        Ydictance = Mathf.Clamp(Ydictance , Ymin ,Ymax )  ; 
        Zdictance = Mathf.Clamp(Zdictance , Zmin, Zmax )  ;

        //确定好角度,四元数 * 三维向量 = 三维向量
        lookPosition = Quaternion.AngleAxis(angle, target .right) * -target.forward ;

        //更新位置
        transform.position = target.position + Vector3.up * Ydictance - lookPosition  * Zdictance  ;

        //更新角度
        transform.rotation = Quaternion.LookRotation(lookPosition);

        //实时速度
          Control = target.GetComponent<CarMoveControl>();

          speed = (int )Control.Km_H / 4;
        
          speed = Mathf.Clamp(speed,0, 55 );   //对应最大200公里每小时

    }
}

InputMana

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//-------------------------------------
//—————————————————————————————————————
//___________项目:       ______________
//___________功能: 输入控制管理器
//___________创建者:秩沅_______________
//_____________________________________
//-------------------------------------
public class InputManager : MonoBehaviour
{
    //单例模式管理
    static private InputManager inputManagerment;
    static public InputManager InputManagerment => inputManagerment;

    public float horizontal;  //水平方向动力值
    public float vertical;    //垂直方向动力值
    public bool  handbanl;    //手刹动力值

    void Awake()
    {
        inputManagerment = this;
    }

    void Update()
    {
        //与Unity中输入管理器的值相互对应

        horizontal = Input.GetAxis("Horizontal");
          vertical = Input.GetAxis("Vertical");
          handbanl = Input.GetAxis("Jump")!= 0 ? true :false ; //按下空格键时就是1,否则为0

    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/957495.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2023年腾讯云优惠券(代金券)领取方法整理汇总

腾讯云优惠券是腾讯云为了吸引用户而推出的一种优惠凭证&#xff0c;领券之后新购、续费、升级腾讯云的相关产品可以享受优惠&#xff0c;从而节省一点的费用&#xff0c;下面给大家分享腾讯云优惠券领取的几种方法。 一、腾讯云官网领券页面领取 腾讯云官网经常推出各种优惠活…

C#,数值计算——Midinf的计算方法与源程序

1 文本格式 using System; namespace Legalsoft.Truffer { public class Midinf : Midpnt { public new double func(double x) { return funk.funk(1.0 / x) / (x * x); } public Midinf(UniVarRealValueFun funcc, double aa,…

内存四区(个人学习笔记黑马学习)

1、内存分区模型 C程序在执行时&#xff0c;将内存大方向划分为4个区域&#xff1a; 代码区:存放函数体的二进制代码&#xff0c;由操作系统进行管理的全局区:存放全局变量和静态变量以及常量栈区:编译器自动分配释放,存放函数的参数值,局部变量等 堆区:由程序员分配和释放,若程…

SpringBoot整合Freemaker结合Vue实现页面填写一键自动生成Redis的配置文件

&#x1f9d1;‍&#x1f4bb;作者名称&#xff1a;DaenCode &#x1f3a4;作者简介&#xff1a;啥技术都喜欢捣鼓捣鼓&#xff0c;喜欢分享技术、经验、生活。 &#x1f60e;人生感悟&#xff1a;尝尽人生百味&#xff0c;方知世间冷暖。 &#x1f4d6;所属专栏&#xff1a;Sp…

DCMM数据能力成熟度评估模型--学习笔记

DCMM数据能力成熟度评估模型--学习笔记 1、DCMM简介、结构组成和成熟度评估等级划分1.1 DCMM简介1.2 DCMM结构组成1.3 DCMM关键过程域1.3.1、数据战略&#xff08;指导方针&#xff09;1.3.2、数据治理 &#xff08;机制保障&#xff09;1.3.3、数据架构 (施工图纸)1.3.4、数据…

WebRTC-Streamer交叉编译

WebRTC-Streamer交叉编译 flyfish 文章目录 WebRTC-Streamer交叉编译零、前言一、提前准备工作1 安装需要的工具2 可选的交叉编译工具3 默认执行python是python34 获取源码5 使用其他版本的方法 二、非交叉编译编译1 在 src目录执行 安装所需的依赖2 执行命令 三、 交叉编译1 …

【GAMES202】Real-Time Global Illumination(in 3D)—实时全局光照(3D空间)

一、SH for Glossy transport 1.Diffuse PRT回顾 上篇我们介绍了PRT&#xff0c;并以Diffuse的BRDF作为例子分析了预计算的部分&#xff0c;包括Lighting和Light transport&#xff0c;如上图所示。 包括我们还提到了SH&#xff0c;可以用SH的有限阶近似拟合球面函数&#xff…

【进阶篇】MySQL的SQL解析原理详解

文章目录 0. 前言1. SQL解析过程1. 词法分析2. 语法分析4. 语法分析树5. MySQL语法分析树生成过程6. 核心数据结构及其关系7. SQL解析的应用 2. 参考文档 0. 前言 你是否已经深入了解了MySQL中 SQL解析过程&#xff0c;以及解析过程中每个环节扮演的具体角色&#xff1f;你是否…

Windows SQLYog连接不上VMbox Ubuntu2204 的Mysql解决方法

Windows SQLYog连接不上VMbox Ubuntu2204 的Mysql解决方法 解决方法&#xff1a; 1、先检查以下mysql的端口状态 netstat -anp|grep mysql如果显示127.0.0.1:3306 则说明需要修改&#xff0c;若为: : :3306&#xff0c;则不用。 在**/etc/mysql/mysql.conf.d/mysqld.cnf**&am…

软件测试之黑盒测试、白盒测试分别是什么?有什么区别?

软件开发过程中&#xff0c;为了保证软件质量和稳定性&#xff0c;必须进行全面而细致的测试工作&#xff0c;而黑盒测试和白盒测试正是两种常用的测试方法。 一、黑盒测试 黑盒测试是一种基于软件外部功能的测试方法。测试人员对待测试的软件系统&#xff0c;就像一个黑匣子…

uniapp-秋云图表 ucharts echarts 对比与关系

科普&#xff1a; 秋云图表库&#xff0c;包含二种配置属性对应二种js配置文件。 一种是 &#xff1a;echarts.js,一种是 &#xff1a; ucharts。 二者的配置属性不一样&#xff01; ucharts和echarts对比 ucharts和echarts都是用于数据可视化的开源JavaScript库&#xff0c;它…

【高危】Apache Airflow Spark Provider 反序列化漏洞 (CVE-2023-40195)

zhi.oscs1024.com​​​​​ 漏洞类型反序列化发现时间2023-08-29漏洞等级高危MPS编号MPS-qkdx-17bcCVE编号CVE-2023-40195漏洞影响广度广 漏洞危害 OSCS 描述Apache Airflow Spark Provider是Apache Airflow项目的一个插件&#xff0c;用于在Airflow中管理和调度Apache Spar…

自动化机器学习Auto-Sklearn安装和使用教程

安装和使用 Auto-Sklearn Auto-sklearn 提供了开箱即用的监督型自动机器学习。从名字可以看出,auto-sklearn 是基于机器学习库 scikit-learn 构建的,可为新的数据集自动搜索学习算法,并优化其超参数。因此,它将机器学习使用者从繁琐的任务中解放出来,使其有更多时间专注于…

django/CVE-2017-12794XSS漏洞复现

docker搭建漏洞复现环境 漏洞原理看帮助文档 # Django debug page XSS漏洞&#xff08;CVE-2017-12794&#xff09;分析Django发布了新版本1.11.5&#xff0c;修复了500页面中可能存在的一个XSS漏洞&#xff0c;这篇文章说明一下该漏洞的原理和复现&#xff0c;和我的一点点评…

一种借助MYSQL递归CTE生成所有组合情况的实现方法

需求说明 有如下表和数据&#xff1a; Nname1户口2查询机构数过多3危险驾驶4多头用信 需要输出name里的所有组合情况&#xff0c;即单个值&#xff0c;两两组合&#xff0c;三个组合、四个组合。结果为2的n次方-1中情况&#xff0c;这里是15。 预期结果为&#xff1a; Com…

【OpenCV入门】第四部分——阈值

文章结构 阈值概述阈值处理函数二值化阈值处理二值化阈值处理反二值化处理 零处理低于阈值零处理超出阈值零处理 截断处理自适应处理Otsu方法 阈值概述 在PhotoShop里头&#xff0c;有一个工具可以快速抠出一幅图像中的轮廓&#xff0c;这个工具就是阈值。OpenCV也提供了阈值&…

springboot实战(二)之将项目上传至远程仓库

目录 环境&#xff1a; 背景&#xff1a; 操作&#xff1a; 1.注册码云账号 2.创建仓库 步骤&#xff1a; 1.注册完码云账号后&#xff0c;点击加号&#xff0c;新建仓库 2.输入项目名称和介绍&#xff0c;点击创建 3.复制仓库地址&#xff0c;你可以选择https协议或者…

ClickHouse进阶(五):副本与分片-2-Distributed引擎

进入正文前&#xff0c;感谢宝子们订阅专题、点赞、评论、收藏&#xff01;关注IT贫道&#xff0c;获取高质量博客内容&#xff01; &#x1f3e1;个人主页&#xff1a;含各种IT体系技术,IT贫道_Apache Doris,大数据OLAP体系技术栈,Kerberos安全认证-CSDN博客 &#x1f4cc;订阅…

ssm+vue宠物领养系统源码和论文

ssmvue宠物领养系统源码和论文103 开发工具&#xff1a;idea 数据库mysql5.7 数据库链接工具&#xff1a;navcat,小海豚等 技术&#xff1a;ssm 摘 要 本课题是根据用户的需要以及网络的优势建立的一个宠物领养系统&#xff0c;来满足用宠物领养的需求。 本宠物领养系统…

抖音短视频账号矩阵seo分发系统--开发源代

1.抖音矩阵号/抖音短视频SEO矩阵系统开发及开发者思路分享: 短视频获客系统开发原型支持短视频智能批量剪辑、短视频多账号管理定时发布&#xff0c;短视频排名查询及优化&#xff0c;智能客服私信回复等&#xff0c;那么短视频seo系统开发时需要开发哪些功能呢&#xff1f;今天…