GAMES101_pa0_Homework

Games101环境配置和作业答案:pa0 引言 这一节的作业主要是为了引导大家配置环境,并学习Eigen库的矩阵、向量等操作。本篇帖子用来记录一下我的心路历程和最终代码。 环境配置 ①先来说一下我在环境配置上吃的苦,我本身装有VMware虚拟机,内核用的是Ubuntu,考虑到Linux在搞开发上的优越性,我打算用这个完成图形学作业,但是真的太太太麻烦了!闫老师那边已经给了Virtual Box和内核,所以真正用Linux并且配置环境的帖子很少!比较有参考性的一个博主的博客我放在这里,该博主的配置时间比较新,对于以后还想尝试环境... 阅读详情

提示:文章内容仅供参考,不保证正确


GAMES101—PA0

齐次坐标的应用,图形学入门的开始

一、齐次坐标系(Homogeneous Coordinates)是什么?

将线性变换+平移统一的一种坐标关系。
可以用一个变换矩阵表示一个Points的任意运动。

线性变换

  • 缩放变换
    在这里插入图片描述

  • 镜像变换
    在这里插入图片描述

  • 错切变换
    在这里插入图片描述

  • 旋转
    在这里插入图片描述

平移

在这里插入图片描述

齐次坐标系的各变换

在这里插入图片描述

二、作业描述

给定一个点 P=(2,1), 将该点绕原点先逆时针旋转 45◦,再平移 (1,2), 计算出
变换后点的坐标(要求用齐次坐标进行计算)。

#include<cmath>
#include<eigen3/Eigen/Core>
#include<eigen3/Eigen/Dense>
#include<iostream>

const double PI = 1.0/4.0 * std::acos(-1);

int main(){
    // P(1, 2) Rotation counterclockwise 45 + T(1 , 2)
    std::cout << "P(2,1) Transformation" << std::endl;
    Eigen::Vector3f P(2.0f, 1.0f, 1.0f);
    Eigen::Matrix3f R, T;
    R <<  cos(PI), -sin(PI), 0.0, sin(PI), cos(PI), 0.0, 0.0, 0.0, 1.0;
    T << 1.0, 0.0, 1.0, 0.0, 1.0, 2.0, 0.0, 0.0, 1.0;
    std::cout << P  << '\n' <<  R << '\n' << T << std::endl;
    // Transformation
    std::cout << T * R * P << std::endl;
    return 0;
}

总结

简单记录一下GAMES101的作业情况,有问题直接留言交流。

【南京大学PA】 PA0 环境配置 & lab (vim | gcc | lab) 以下是一个简单的Makefile,用于编译C语言中的“Hello World”程序: + `Makefile` 文件名的文件 和 `hello.c` 必须在同一目录文件下 ``` CC=gcc 指定用gcc编译器进行编译 CFLAGS=-Wall 第二行指定了编译选项 -wall 表示开启 所有警告信息 (去了也不影响) hello: hello.c 编译目标程序是hello 依赖于 hello.c 文件 $(CC) $(CFLAGS) -o hello hell 阅读详情

相关推荐

games101作业1:旋转与投影

games101作业1:旋转与投影 内容 本次作业的任务是填写一个旋转矩阵和一个透视投影矩阵。给定三维下三个点 v0(2.0, 0.0, 2.0), v1(0.0, 2.0, 2.0), v2( 2.0, 0.0, 2.0), 你需要将这三个点的坐标变换为屏幕坐标并在屏幕上绘制出对应的线框三角形。通过进行模型、视图、投影、视口等变换来将三角形显示在屏幕上。在提供的代码框架中,我们留下了模型变换和投影变换的部分给你去完成。 get_model_matrix(float rotation_angle): 逐

一个勤奋的coder的博客 9896

【GAMES101】作业1--MVP(模型、视图、投影)变换

本文为GAMES101现代计算机图形学入门 的学习笔记系列。我们的系列笔记将分为两部分:原课程为2020年2月闫令琪所教授的 GAMES101 现代计算机图形学入门。课程主页:https://sites.cs.ucsb.edu/~lingqi/teaching/games101.html (幻灯片和课程录像均在此处)课程共计22节。作业共计8次。针对人群:计算机图形学入门新手教材: Steve Marschner and Peter Shirley的"Fundamentals of Computer Gra

beidou111的博客 1886

Windows 10 下 DockerToolbox 安装全攻略:从下载到配置阿里云镜像加速

本文详细介绍了在Windows 10系统上安装和配置DockerToolbox的完整流程。从下载安装包、执行初步安装,到关键步骤——修改虚拟机存储路径以及配置阿里云镜像加速器,旨在帮助开发者,尤其是初次接触Docker的新手,快速搭建高效的本地容器开发环境,并解决国内镜像下载缓慢的痛点。

moon9的博客 476

GAMES101 作业1

本文讲了GAMES101作业1中涉及的知识和代码实现。源码可以去[我的Github](https://github.com/andersonhusky/GAMES101)查看,为pa1对应的部分。

qq_41265365的博客 1万+

halcon与c#联合编程实现相机控制+图像平移缩放+日志记录+缺陷检测+路径规划

halcon与c#联合编程实现相机控制+图像平移缩放+日志记录+缺陷检测+路径规划 前言 本人近期在工作中遇到需要对某场景下利用海康相机进行图像缺陷检测与对应路径规划。通过对海康相机示例代码进行吸收与借鉴,最终实现了对海康相机的控制,并增加HSmartWindowControl控件,实现图像的实时显示与平移缩放功能;通过listview+toolstrip实现日志显示与类型(提示、警告、错误)分类;同时自行编制算法实现对缺陷的识别以及缺陷外扩矩形范围内的路径规划。 1.日志记录 代码如下(示例):

weixin_37864926的博客 2717

电源芯片TPS54560典型应用电路及设计详解

TPS54560 是一款配有集成型高侧 MOSFET 的 60V、5A DC-DC转换器,输入电压范围7-60V,输出电压可通过外部反馈电阻设置成略低于输入电压的任意值。**所以,**R5=31.25KΩ、R6:10KΩ(常用值)时,即可设置输出电压为 3.3V。**所以,**R5=140KΩ、R6:10KΩ(常用值)时,即可设置输出电压为12V。设计 TPS54560 的输出电压时,主要通过外部反馈电阻网络来设置输出电压。因此,输出 3.3V ,输入电压24V时推荐的电感值为 8µH 至 10µH。

weixin_42306872的博客 1万+

games101作业1

第一行的值代表X轴,也是g*t 求得,第二行代表up direction,也就是Y轴,xyz坐标系下的UP direction 方向应该是(0,0,1),第三行代表-Z轴,由-g坐标求得。为了方便之后投影变换,我们需要将此gte左边转换为空间直角坐标,将position移动到坐标系的源点(origin),那么g需要旋转到-z轴,t旋转到Y轴,剩下的g x t旋转到X轴。可以测试矩阵的正确性,如带入1,0,0,0,乘以Rview-1 是可以得到X轴的坐标值 g*t的。那么用数学公式如何转换?

lmy347771232的博客 778

矩阵束(Matrix Pencil)入门:从通信系统到控制理论,它为何是建模利器?

本文深入探讨矩阵束(Matrix Pencil)在通信系统与控制理论中的关键作用,揭示其作为复杂系统建模利器的独特价值。从MIMO系统的多径干扰分析到电力系统稳定性判据,矩阵束通过`A-λB`方程求解提供精准建模方案,显著提升5G通信和工业控制等领域的性能表现。

weixin_30134145的博客 358

网课:GAMES101-homework pa0

作业1还是挺简单的,把课上一些基本的概念写成代码即可。 #include<cmath> #include<eigen3/Eigen/Core> #include<eigen3/Eigen/Dense> #include<iostream> int main(){ // Basic Example of cpp std::cout << "Example of cpp \n"; float a = 1.0, b = 2.

dlvector的博客 481

System Verilog学习笔记(十九)——覆盖率

覆盖率是用来衡量验证精度和完备性的数据指标。也可以告诉我们在仿真时设计的哪些结构被触发,哪些没被触发。高质量的验证需要满足以下三个条件。

ljy77882333的博客 2142

一次搞懂 OData Deep Create:在 ABAP Client Proxy 中优雅完成父子实体的一键插入

摘要: 本文面向熟悉SAP Gateway与OData的ABAP工程师,详解Deep Create的核心概念与实现。Deep Create允许在一次请求中原子化创建主实体及其关联子实体(如Team与Manager),解决多次HTTP请求导致的脏写问题。对比OData v2/v4协议差异后,重点阐述ABAP Client Proxy中通过Data Description Node构造层级数据描述树的方法,包括根/子节点定义、属性对齐及业务数据绑定。提供可复用的ABAP代码骨架,并区分Deep Create与$

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 185

Games101Homework【0】Build an environment

Games101Homework【0】Build an environment

weixin_61943345的博客 430

NSGA-II 多目标优化 —— 理论、案例与交互式 GUI 实现

本文详细介绍了 NSGA-II 多目标优化算法的基本原理、数学模型和实现流程。从非支配排序、拥挤距离计算到遗传操作,NSGA-II 通过对种群进行分层和排序,能够有效求解多目标优化问题,获得 Pareto 前沿解集。通过机械结构优化、资源分配和控制参数调优等典型案例,我们展示了 NSGA-II 在实际工程中的广泛应用。为帮助工程师和研究者更直观地理解算法求解过程,本文提供了基于 Python 与 PyQt6 的交互式 GUI 演示系统代码示例。

闲人编程的博客 2119

Games101Homework【6】Acceleration structure(Including framework analysis)

Games101Homework【6】Acceleration structure(Including framework analysis)

weixin_61943345的博客 1038

手把手教你学 GPU KMD”相关内容的专栏简介与目录

本专栏系统讲解GPU内核模式驱动(KMD)开发技术,涵盖四大核心模块:1)GPU驱动架构基础,解析UMD/KMD协同机制;2)KMD核心功能,包括内存管理、命令提交、中断处理等;3)底层硬件交互,详解PCIe/DMA传输、多级页表等;4)实战进阶,结合Linux DRM框架代码分析,探讨GPU虚拟化与性能优化。面向具备OS和C语言基础的开发者,提供从理论到实践的完整学习路径,帮助深入理解图形/计算驱动栈的底层实现原理。

amy_mhd的博客 153

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

【GAMES101】作业1(提高)与框架理解

作业描述 本次作业的任务是填写一个旋转矩阵和一个透视投影矩阵。给定三维下三个点 v0(2.0, 0.0, −2.0), v1(0.0, 2.0, −2.0), v2(−2.0, 0.0, −2.0), 你需要将这三个点的坐标变换为屏幕坐标并在屏幕上绘制出对应的线框三角形 (在代码框架中,我们已经提供了 draw_triangle 函数,所以你只需要去构建变换矩阵即可)。简而言之,我们需要进行模型、视图、投影、视口等变换来将三角形显示在屏幕上。在提供的代码框架中,我们留下了模型变换和投影变换的部分给你去完成。

ycrsw的博客 1万+

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

GAMES101 作业0 环境配置 超详细小白教程

使用chrome直接点击连接(如下图所示)什么都打不开,这时候需要右键→复制链接,再粘贴到地址栏即可(或者直接复制此链接 http://games-cn.org/wp-content/uploads/2020/02/pa0.zip ,去往该地址之后浏览器会自动下载)......

onion23的博客 5121

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

GAMES101——作业1 旋转与投影(含提高:罗德里格斯旋转公式)

zNear是近平面到摄像机的距离,已知视角,可以根据正切函数求出一半的高度,最后乘2就可以得到近平面的高度,根据宽高比,求出近平面的宽度。再根据推导出的矩阵,代入数据即可求得所需的结果。所有的和数学有关的推导,这里不再说明,基本直接套用结果,不清楚可以重新看一遍games101的课程对应的知识。之后的文章亦是如此。修改后的模型矩阵函数,这里绕着指定的轴(0.5000,0.2000,0.8426)旋转。绕x,y,z轴的变换矩阵如下,算出两个三角函数值后直接代入即可。轴旋转的变换矩阵,而不用处理平移与缩放。

weixin_50780569的博客 989

PA0-记录

PA0记录

weixin_45591968的博客 123

GAMES101作业 1: 旋转与投影

ps,主要拜读了GitHub大佬的作业代码并结合自己的理解加上了一些注释,更适合0基础宝子的体质,虚拟机和主机之间拖动文件出bug了,有空再根据自己的理解写一遍,做一些点微调(

2301_79799657的博客 1543

Games101-作业1-旋转与投影(含提高)

根据作业的说明,可以明确框架已经完成了MVP中的模型和视图变换,我们要做的是投影变换和绕z轴旋转矩阵。这次作业框架知道main.cpp中流程是什么和每个接口的作用就可以了。读完说明和main.cpp注意:Eigen默认弧度制,但框架中接口函数参数提供的角为角度值,所以要先。

zgynbnbnb的博客 1337

games101-闵令琪教授-作业1详解

本人是菜B,这节课的作业琢磨了很久,力求将每个知识点搞懂,特写下博客记录,既是总结方法论,也希望能帮助到大家。

m0_52058484的博客 1080

games101_作业1

题目: 本次作业的任务是填写一个旋转矩阵和一个透视投影矩阵。给定三维下三个 点 v0(2.0, 0.0, −2.0), v1(0.0, 2.0, −2.0), v2(−2.0, 0.0, −2.0), 你需要将这三个点的坐 标变换为屏幕坐标并在屏幕上绘制出对应的线框三角形 (在代码框架中,我们已 经提供了 draw_triangle 函数,所以你只需要去构建变换矩阵即可)。简而言之, 我们需要进行模型、视图、投影、视口等变换来将三角形显示在屏幕上。在提供 的代码框架中,我们留下了模型变换和投影变换的部分给你

weixin_43789369的博客 968

图像学(games101,作业0、1)

•逐个元素地构建模型变换矩阵并返回该矩阵。在此函数中,你只需要实现三维中绕 z 轴旋转的变换矩阵,而不用处理平移与缩放。•使用给定的参数逐个元素地构建透视投影矩阵并返回该矩阵。•自行补充你所需的其他操作。当在上述函数中正确地构建了模型与投影矩阵,光栅化器会创建一个窗口显示出线框三角形。由于光栅化器是逐帧渲染与绘制的,所以你可以使用A和D键去将该三角形绕 z 轴旋转。当你按下Esc键时,窗口会关闭且程序终止。另外,也可以从命令行中运行该程序。

qq_53386557的博客 1400

games101 实验hw1(作业1)

Tview已经写好,而Rview没用上。

qq_35975367的博客 708

[学习笔记24.9.4]GAMES101作业1

小白完成GAMES101作业1花费一周多,主要原因在于完成此作业需配置opencv库,较为繁琐。而后发现windows环境不能顺利完成任务,故用easyx.h图形库做了一个轻量的光栅化器替代原本的光栅化器模板。该光栅化器不涉及深度缓冲,但本次作业并不需要所以足够支撑我完成作业。以下是作业复盘。(作业1使用右手系,旋转默认逆时针;复盘内容仅涉及代码问题,不含括数学)

m0_67149275的博客 746
ShenH_Note
博客等级 码龄9年 1粉丝 1原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值