周报1

C4D

1. 远近景深问题

先创建所需要的模型与摄像机,然后创建一个空白模型,并将空白模型的中心与所要突出的模型重合,该模型为空白模型的子级。点击摄像机设置,选择物理模式并勾选景深。点击摄像机,并将空白放入焦点对象中,选择物理并将光圈的数值减小(光圈越小越模糊,即景深越深)。然后进行渲染则可得到结果。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2. 摄像机的使用

  • 摄像机

    给场景添加灯光之前,需要建立摄像机(位于上方工具栏)
    点击大纲栏摄像机后面的方框,表示进入摄像机
    画框尺寸的设置:渲染设置—输出—自定义尺寸即为摄像机的尺寸
    进入摄像机,适当调节摄像机角度,即可在当前角度打光和进行其他设置

  • 摄像机类型:
    (1)基础:常用于K画面
    (2)目标:常用于K画面,大纲栏摄像机后面多一个目标表达式的标志(类似于目标聚光灯中的空白,可通过调节目标调节角度)
    (3)立体
    (4)运动:进入摄像机—点击播放→有轻微晃动的效果,即模拟手持摄像机的效果
    (5)摇臂:模拟摄像机被吊起后朝向某个方向,进入摄像机后可调节云台的高度、朝向、吊臂的长度、高度—退出摄像机,可调节整个摄像机的位置

  • 模型
    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述

PS海报制作

在这里插入图片描述
(自我感觉良好之后做梦爱奇艺大大捞我海报,然鹅…来自父亲大人的直接了当的回复)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
于是再附上本来综艺的海报图,产生鲜明的效果
在这里插入图片描述

HTML的学习

刚涉及然后在菜鸟教程学习基础的知识。

< map >定义图像地图

    < map name = " plantemap" >
     	<area shape = "rect" corrds = " 0,0,82,126" alt="sun"  href = " sun.htm " >

area------定义可点击区域
shape----点击区域的形状
corrds----链接区域在图片中的坐标

  • 矩形 ------ “rect”
    < area shape = " rect " corrds = "x1,y1,x2,y2" href = url >
    x1,y2为左上顶点的坐标,x2,y2为右上顶点的坐标
  • 圆形 ------ " circle "
    < area shape = " circle " corrds = "x1,y1,r" href = url >
    x1,y1为圆心的坐标,r为圆的半径
  • 多边形 ------ " poly "
    area shape = " poly " corrds = "x1,y1,x2,y2......" href = url >
    x1,y1,x2,y2…分别为各顶点的坐标

表格的标签

标签描述
< table >定义表格
< th >定义表格的表头
< tr >定义表格的行
< td >定义表格单元
< caption >定义表格标题
< colgroup >定义表格列的组
< col >定义用于表格列的属性
< thead >定义表格的页眉
< tbody >定义表格的主体
< tfoot >定义表格的页脚

HTML中的table可以大致分为三个部分:

  1. thead ---------表格的页眉
  2. tbody ---------表格的主体
  3. tfoot ---------定义表格的页脚

thead, tbody, tfoot 相当于三间房子,每间房子都可以用来放东西。

< tr > < /tr > 这个标签就是放在三间房子里面的东西,每一个 < tr > < /tr > 就是表格一行。
表格的每一行被分为一个个单元格。
每一个单元格就是用来存放数据的,这个数据分为两种:一,数据的名称;二,数据本身。
用 < th >< /th > 表示数据的名称(标题) ,
< td >< /td >
表示真正的数据内容。
在这里插入图片描述
一个简单实例:
在这里插入图片描述

C语言

指针数组和数组指针

  1. 指针数组 -------即指针的数组(含有指针的数组)
    首先它是一个数组,数组的元素都是指针,数组占多少个字节由数组本身决定。它是“储存指针的数组”的简称,即每个元素都是指针。

    指针数组是多个指针变量,以数组的形式存储在内存中,占有多个指针的存储空间。

    int * pt[4]
    “[]”的优先级比“”要高。pt 先与“[]”结合,构成一个数组的定义,数组名为pt,int 修饰的是数组的内容,即数组的每个元素.因此这是一个数组,其包含4 个指向int 类型数据的指针,即指针数组。
    在这里插入图片描述

int main()
{
	int a = 1;
	int b = 2;
	int *p[2];
	p[0] = &a;
	p[1] = &b;
	
	printf("%p\n", p[0]); //a的地址
	printf("%p\n", &a); //a的地址
	printf("%p\n", p[1]); //b的地址
	printf("%p\n", &b); //b的地址
	printf("%d\n", *p[0]); //p[0]表示a的地址,则*p[0]表示a的值
	printf("%d\n", *p[1]); //p[1]表示b的地址,则*p[1]表示b的值
 
 	//将二维数组赋给指针数组
	int *pp[3]; //一个一维数组内存放着三个指针变量,分别是p[0]、p[1]、p[2],所以要分别赋值
	int c[3][4];
	
	for (int i = 0; i<3; i++)
		pp[i] = c[i];
 	int k;
	scanf("%d", &k);
	
     return 0;
     }

1.1指针数组在参数传递时的使用
指针数组常用在主函数传参,在写主函数时,参数有两个,一个确定参数个数,一个这是指针数组用来接收每个参数(字符串)的地址

int main(int argc, char *argv[])

此时可以想象内存映像图,主函数的栈区有一个叫argv的数组,这个数组的元素是你输入的参数的地址,指向着只读数据区。

如果是向子函数传参,这和传递一个普通数组的思想一样,不能传递整个数组过去,如果数组很大,这样内存利用率很低,所以应该传递数组的首地址,用一个指针接收这个地址。因此,指针数组对应着二级指针

void fun(char **pp);//子函数中的形参
fun(char *p[]);//主函数中的实参

1.2指针数组的排序
指针数组的排序非常有趣,因为这个数组中存放的是指针,通过比较指针指向的空间的大小,排序这些空间的地址。函数实现如下:

void sort(char **pa, int n)//冒泡排序
{
    int i, j;
    char *tmp = NULL;

    for(i = 0; i < n-1; i++){
        for(j = 0; j < n-1-i; j++){
            if((strcmp(*pa+j), *(pa+j+1)) > 0){
                tmp = *(pa + j);
                *(pa + j) = *(pa + j + 1);
                *(pa + j + 1) = tmp;
            }
        }
    }
}

在函数中定义指针数组,并且打印结果如下:

char *pa[4] = {"abc", "xyz", "opq", "xyz"};

[root@menwen-linux test]# ./test 
abc
ijk
opq
xyz

2.数组指针--------数组的指针(指向数组的指针)
首先它是一个指针,它指向一个数组,即指向数组的指针;在32 位系统下永远是占4 个字节,至于它指向的数组占多少字节,不知道。数组指针指向的是数组中的一个具体元素,而不是整个数组,所以数组指针的类型和数组元素的类型有关。

int ( * pt )[4]
“()”的优先级比“[]”高,“*”号和p2 构成一个指针的定义,指针变量名为p2,int 修饰的是数组的内容,即数组的每个元素。数组在这里并没有名字,是个匿名数组。因此p2 是一个指针,它指向一个包含10 个int 类型数据的数组,即数组指针 .
在这里插入图片描述


int main()
{
	//一维数组
	int a[5] = { 1, 2, 3, 4, 5 };
	//步长为5的数组指针,即数组里有5个元素
	int (*p)[5];
	//把数组a的地址赋给p,则p为数组a的地址,则*p表示数组a本身
	p = &a;
 
	//%p输出地址, %d输出十进制
	//\n回车
	//在C中,在几乎所有使用数组的表达式中,数组名的值是个指针常量,也就是数组第一个元素的地址,它的类型取决于数组元素的类型。
	printf("%p\n", a); //输出数组名,一般用数组的首元素地址来标识一个数组,则输出数组首元素地址
	printf("%p\n", p); //根据上面,p为数组a的地址,输出数组a的地址
	printf("%p\n", *p); //*p表示数组a本身,一般用数组的首元素地址来标识一个数组
	printf("%p\n", &a[0]); //a[0]的地址
	printf("%p\n", &a[1]); //a[1]的地址
	printf("%p\n", p[0]); //数组首元素的地址
	printf("%d\n", **p); //*p为数组a本身,即为数组a首元素地址,则*(*p)为值,当*p为数组首元素地址时,**p表示首元素的值1
	printf("%d\n", *p[0]); //根据优先级,p[0] 表示首元素地址,则*p[0]表示首元素本身,即首元素的值1
	printf("%d\n", *p[1]); //为一个绝对值很大的负数,不表示a[1]...表示什么我还不知道
 
	
 
	//将二维数组赋给指针
	int b[3][4];
	int(*pp)[4]; //定义一个数组指针,指向含4个元素的一维数组
	pp = b; //将该二维数组的首地址赋给pp,也就是b[0]或&b[0],二维数组中pp=b和pp=&b[0]是等价的
	pp++; //pp=pp+1,该语句执行过后pp的指向从行b[0][]变为了行b[1][],pp=&b[1]
 
	int k;
	scanf("%d", &k);
 
    return 0;
}

2.1 数组指针传参时的使用
数组指针既然是一个指针,那么就是用来接收地址,在传参时就接收数组的地址,所以数组指针对应的是二维数组。

void fun(int (*P)[4]);//子函数中的形参,指针数组 

a[3][4] = {0};//主函数中定义的二维数组
fun(a);//主函数调用子函数的实参,是二维数组的首元素首地址

2.2利用数组指针遍历数组

#include <stdio.h>
#include<iostream>
using namespace std;
int main()
{
    int arr[] = { 1, 3, 5, 7, 9};
    int len = sizeof(arr) / sizeof(int);  //求数组长度
    int i, *p = arr;
    for(i=0; i<len; i++)
    {
        printf("%d  ", *(p+i) );
    }
    printf("\n");
    return 0;
}

数组在内存中只是数组元素的简单排列,没有开始和结束标志,在求数组的长度时不能使用sizeof( p ) / sizeof(int),因为 p 只是一个指向 int 类型的指针,编译器并不知道它指向的到底是一个整数还是一系列整数(数组),所以 sizeof( p ) 求得的是 p 这个指针变量本身所占用的字节数,而不是整个数组占用的字节数。
根据数组指针不能逆推出整个数组元素的个数,以及数组从哪里开始、到哪里结束等信息。不像字符串,数组本身也没有特定的结束标志,如果不知道数组的长度,那么就无法遍历整个数组。
对指针变量进行加法和减法运算时,是根据数据类型的长度来计算的。如果一个指针变量 p 指向了数组的开头,那么 p+i 就指向数组的第 i 个元素;如果 p 指向了数组的第 n 个元素,那么 p+i 就是指向第 n+i 个元素;而不管 p 指向了数组的第几个元素,p+1 总是指向下一个元素,p-1 也总是指向上一个元素
更改上面的代码,让 p 指向数组中的第二个元素:

#include <stdio.h>
#include<iostream>
using namespace std;
int main()
{
    int arr[] = { 1, 3, 5, 7, 9};
    int *p = &arr[2];  //也可以写作 int *p = arr + 2;
    printf("%d, %d, %d, %d, %d\n", *(p-2), *(p-1), *p, *(p+1), *(p+2) );
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值