锥形螺旋曲线的绘制

#include<GL/glut.h>
#include <math.h>
#define PI 3.14
void drawMyLines()
{
	float t;
	float x,y,z;
	float a=2,b=3,c=18;
	glColor3f(1.0,0.5,0.5);
	glBegin(GL_LINE_STRIP);
		for(t=0.0;t<=2*PI;t+=0.0002)
		{
			x=a*t*cos(c*t)+b;
			y=a*t*sin(c*t)+b;
			z=c*t;
			glVertex3f(x,y,z);
		}
	glEnd();

	glColor3f(1.0,1.0,1.0);
	glBegin(GL_LINES);  //建立坐标轴
		glVertex3f(0,0,0);
		glVertex3f(12,0,0);
	glEnd();
	glBegin(GL_LINES);  //建立坐标轴
         glVertex3f(0,0,0);
		glVertex3f(0,0,12);
	glEnd();
	glBegin(GL_LINES);  //建立坐标轴
		glVertex3f(0,0,0);
		glVertex3f(0,12,0);
	glEnd();
}
void display()
{
	glClear(GL_COLOR_BUFFER_BIT);
	drawMyLines();    //调用drawMyLines函数
			
	glFlush();
}

void init()
{
	glClearColor(0.0,0.0,0.0,0.0);

	glColor3f(1.0,1.0,1.0);

	gluLookAt(1,1,1,   //更改视角
		3,3,3,
		-1,-1,1
		);

	glMatrixMode(GL_PROJECTION);  //设置投影模式
	glLoadIdentity();            //设置单位矩形
	glOrtho(-12.0,12.0,-12.0,12.0,-12,12);

}


int main(int argc, char* argv[])
{
	 
    glutInit(&argc, argv);

	glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
    glutInitWindowSize(500, 500);
	glutInitWindowPosition(0, 0);
	glutCreateWindow("Simple");

	glutDisplayFunc(display);
    
	init();

	glutMainLoop();   //使程序一直处在监听状态中
        
   
	return 0;
}
  分别利用点、线图元生成锥形螺旋曲线和环形螺旋曲线,要求可以设置点的大小、线可以设置线形和宽度。
锥形螺旋曲线的参数方程为:


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个基于视锥形可视域分析绘制效果的Unity脚本: ```csharp using UnityEngine; public class VisualAnalysis : MonoBehaviour { public float viewDistance = 10f; // 可视距离 public float viewAngle = 60f; // 可视角度 public Color gizmoColor = Color.red; // 可视范围的颜色 private Transform player; // 玩家的Transform组件 private Vector3 raycastOffset; // 射线检测的偏移量 void Start() { // 获取玩家的Transform组件 player = GameObject.FindGameObjectWithTag("Player").transform; // 设置射线检测的偏移量 raycastOffset = new Vector3(0, player.GetComponent<Collider>().bounds.size.y / 2, 0); } void Update() { // 计算玩家和视野之间的距离 float distance = Vector3.Distance(transform.position, player.position); // 如果玩家在可视范围内,并且没有障碍物遮挡,则可见 if (distance <= viewDistance && IsVisible()) { Debug.Log("Player is visible!"); } } // 检测玩家是否可见 bool IsVisible() { // 计算玩家和视野之间的向量 Vector3 direction = player.position - transform.position; // 计算玩家和视野之间的角度 float angle = Vector3.Angle(direction, transform.forward); // 如果玩家在可视角度内,并且没有障碍物遮挡,则可见 if (angle <= viewAngle / 2) { RaycastHit hit; if (Physics.Raycast(transform.position + raycastOffset, direction.normalized, out hit, viewDistance)) { if (hit.collider.gameObject.CompareTag("Player")) { return true; } } } return false; } // 绘制可视范围的Gizmo void OnDrawGizmos() { Gizmos.color = gizmoColor; Gizmos.DrawFrustum(transform.position, viewAngle, viewDistance, 0f, Camera.main.aspect); } } ``` 这个脚本会检测玩家是否在视野范围内,如果玩家在范围内并且没有障碍物遮挡,则会输出日志信息。在这个脚本中,使用了视锥形绘制可视范围的Gizmo,同时也可以通过修改可视距离、可视角度和Gizmo的颜色来调整可视范围的显示效果。在Unity编辑器中,可以通过选择这个脚本所在的物体来查看可视范围的绘制效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值