#include "stdafx.h"
#include <iostream>
#include <graphics.h> // 包含 EasyX 头文件
#include<conio.h>
using namespace std;
struct Point {
float x;
float y;
};
// 计算贝塞尔曲线上的点
Point calculateBezierPoint(Point start, Point control1, Point control2, Point end, float t) {
Point result;
result.x = pow(1 - t, 3) * start.x + 3 * pow(1 - t, 2) * t * control1.x + 3 * (1 - t) * pow(t, 2) * control2.x + pow(t, 3) * end.x;
result.y = pow(1 - t, 3) * start.y + 3 * pow(1 - t, 2) * t * control1.y + 3 * (1 - t) * pow(t, 2) * control2.y + pow(t, 3) * end.y;
return result;
}
// 绘制贝塞尔曲线
void drawBezierCurve(Point start, Point control1, Point control2, Point end, int numPoints) {
Point prevPoint = start;
for (int i = 1; i <= numPoints; ++i) {
float t = static_cast<float>(i) / numPoints;
Point p = calculateBezierPoint(start, control1, control2, end, t);
line(static_cast<int>(prevPoint.x), static_cast<int>(prevPoint.y),
static_cast<int>(p.x), static_cast<int>(p.y)); // 绘制从前一个点到当前点的直线段
prevPoint = p;
}
}
void ear1()
{
setlinecolor(RGB(80,42,33));
setlinestyle(PS_SOLID, 5); // 设置线条样式为实线,线宽为3
Point start = {200, 354};
Point control1 = {133,280}; // 第一个控制点
Point control2 = {84,185}; // 第二个控制点
Point end = {89,99};
int numPoints = 100; // 指定绘制曲线的精度,即分成多少段
Point start1 = {194,79};
Point control11 = {213,96};
Point control22 = {252,212};
Point end1 = {255,314};
Point start11 = {89,99};
Point control111 = {120,62};
Point control222 = {140,57};
Point end11 = {194,79};
cleardevice(); // 清屏
drawBezierCurve(start, control1, control2, end, numPoints); // 绘制贝塞尔曲线
drawBezierCurve(start1, control11, control22, end1, numPoints);
drawBezierCurve(start11, control111, control222, end11, numPoints);
}
void ear2()
{
setlinecolor(RGB(80,42,33));
setlinestyle(PS_SOLID, 5); // 设置线条样式为实线,线宽为3
Point start = {349,299};
Point control1 = {322,185};
Point control2 = {314,114};
Point end = {317,55};
int numPoints = 100; // 指定绘制曲线的精度,即分成多少段
Point start1 = {317,55};
Point control11 = {337,29};
Point control22 = {394,31};
Point end1 = {440,74};
Point start11 = {440,74};
Point control111 = {451,114};
Point control222 = {430,244};
Point end11 = {403,310};
drawBezierCurve(start, control1, control2, end, numPoints); // 绘制贝塞尔曲线
drawBezierCurve(start1, control11, control22, end1, numPoints);
drawBezierCurve(start11, control111, control222, end11, numPoints);
}
void Cochlea1()
{
setlinecolor(RGB(255,131,121));
setlinestyle(PS_SOLID, 5); // 设置线条样式为实线,线宽为3
Point start = {209,344};
Point control1 = {185,315};
Point control2 = {133,231};
Point end = {117,171};
int numPoints = 100;
Point start1 = {117,171};
Point control11 = {122,149};
Point control22 = {142,127};
Point end1 = {179,126};
Point start11 = {179,126};
Point control111 = {205,150};
Point control222 = {233,248};
Point end11 = {239,323};
drawBezierCurve(start, control1, control2, end, numPoints); // 绘制贝塞尔曲线
drawBezierCurve(start1, control11, control22, end1, numPoints);
drawBezierCurve(start11, control111, control222, end11, numPoints);
}
void fillCochlea1()
{
// 设置填充颜色和线条样式
setfillcolor(RGB(255, 131, 121));
setlinecolor(RGB(255, 131, 121));
setlinestyle(PS_SOLID, 5);
// 定义顶点数组
POINT points[] = {
{209, 344},
{185, 315},
{133, 231},
{117, 171},
{117, 171},
{122, 149},
{142, 127},
{179, 126},
{179, 126},
{205, 150},
{233, 248},
{239, 323}
};
// 绘制多边形并填充
fillpolygon(points, sizeof(points) / sizeof(points[0]));
}
void Cochlea2()
{
setlinecolor(RGB(255,131,121));
setlinestyle(PS_SOLID, 5); // 设置线条样式为实线,线宽为3
Point start = {364,301};
Point control1 = {352,242};
Point control2 = {340,157};
Point end = {346,99};
int numPoints = 100; // 指定绘制曲线的精度,即分成多少段
Point start1 = {346,99};
Point control11 = {358,83};
Point control22 = {381,80};
Point end1 = {414,105};
Point start11 = {414,105};
Point control111 = {426,159}; // 第一个控制点
Point control222 = {416,224}; // 第二个控制点
Point end11 = {390,306};
drawBezierCurve(start, control1, control2, end, numPoints); // 绘制贝塞尔曲线
drawBezierCurve(start1, control11, control22, end1, numPoints);
drawBezierCurve(start11, control111, control222, end11, numPoints);
}
void fillCochlea2()
{
// 设置填充颜色和线条样式
setfillcolor(RGB(255, 131, 121));
setlinecolor(RGB(255, 131, 121));
setlinestyle(PS_SOLID, 5); // 设置线条样式为实线,线宽为5
// 定义顶点数组
POINT points[] = {
{364,301},
{352,242},
{340,157},
{346,99},
{358,83},
{381,80},
{414,105},
{426,159},
{416,224},
{390,306}
};
// 绘制多边形并填充
fillpolygon(points, sizeof(points) / sizeof(points[0]));
}
#include <iostream>
#include <graphics.h> // 包含 EasyX 头文件
#include<conio.h>
using namespace std;
struct Point {
float x;
float y;
};
// 计算贝塞尔曲线上的点
Point calculateBezierPoint(Point start, Point control1, Point control2, Point end, float t) {
Point result;
result.x = pow(1 - t, 3) * start.x + 3 * pow(1 - t, 2) * t * control1.x + 3 * (1 - t) * pow(t, 2) * control2.x + pow(t, 3) * end.x;
result.y = pow(1 - t, 3) * start.y + 3 * pow(1 - t, 2) * t * control1.y + 3 * (1 - t) * pow(t, 2) * control2.y + pow(t, 3) * end.y;
return result;
}
// 绘制贝塞尔曲线
void drawBezierCurve(Point start, Point control1, Point control2, Point end, int numPoints) {
Point prevPoint = start;
for (int i = 1; i <= numPoints; ++i) {
float t = static_cast<float>(i) / numPoints;
Point p = calculateBezierPoint(start, control1, control2, end, t);
line(static_cast<int>(prevPoint.x), static_cast<int>(prevPoint.y),
static_cast<int>(p.x), static_cast<int>(p.y)); // 绘制从前一个点到当前点的直线段
prevPoint = p;
}
}
void ear1()
{
setlinecolor(RGB(80,42,33));
setlinestyle(PS_SOLID, 5); // 设置线条样式为实线,线宽为3
Point start = {200, 354};
Point control1 = {133,280}; // 第一个控制点
Point control2 = {84,185}; // 第二个控制点
Point end = {89,99};
int numPoints = 100; // 指定绘制曲线的精度,即分成多少段
Point start1 = {194,79};
Point control11 = {213,96};
Point control22 = {252,212};
Point end1 = {255,314};
Point start11 = {89,99};
Point control111 = {120,62};
Point control222 = {140,57};
Point end11 = {194,79};
cleardevice(); // 清屏
drawBezierCurve(start, control1, control2, end, numPoints); // 绘制贝塞尔曲线
drawBezierCurve(start1, control11, control22, end1, numPoints);
drawBezierCurve(start11, control111, control222, end11, numPoints);
}
void ear2()
{
setlinecolor(RGB(80,42,33));
setlinestyle(PS_SOLID, 5); // 设置线条样式为实线,线宽为3
Point start = {349,299};
Point control1 = {322,185};
Point control2 = {314,114};
Point end = {317,55};
int numPoints = 100; // 指定绘制曲线的精度,即分成多少段
Point start1 = {317,55};
Point control11 = {337,29};
Point control22 = {394,31};
Point end1 = {440,74};
Point start11 = {440,74};
Point control111 = {451,114};
Point control222 = {430,244};
Point end11 = {403,310};
drawBezierCurve(start, control1, control2, end, numPoints); // 绘制贝塞尔曲线
drawBezierCurve(start1, control11, control22, end1, numPoints);
drawBezierCurve(start11, control111, control222, end11, numPoints);
}
void Cochlea1()
{
setlinecolor(RGB(255,131,121));
setlinestyle(PS_SOLID, 5); // 设置线条样式为实线,线宽为3
Point start = {209,344};
Point control1 = {185,315};
Point control2 = {133,231};
Point end = {117,171};
int numPoints = 100;
Point start1 = {117,171};
Point control11 = {122,149};
Point control22 = {142,127};
Point end1 = {179,126};
Point start11 = {179,126};
Point control111 = {205,150};
Point control222 = {233,248};
Point end11 = {239,323};
drawBezierCurve(start, control1, control2, end, numPoints); // 绘制贝塞尔曲线
drawBezierCurve(start1, control11, control22, end1, numPoints);
drawBezierCurve(start11, control111, control222, end11, numPoints);
}
void fillCochlea1()
{
// 设置填充颜色和线条样式
setfillcolor(RGB(255, 131, 121));
setlinecolor(RGB(255, 131, 121));
setlinestyle(PS_SOLID, 5);
// 定义顶点数组
POINT points[] = {
{209, 344},
{185, 315},
{133, 231},
{117, 171},
{117, 171},
{122, 149},
{142, 127},
{179, 126},
{179, 126},
{205, 150},
{233, 248},
{239, 323}
};
// 绘制多边形并填充
fillpolygon(points, sizeof(points) / sizeof(points[0]));
}
void Cochlea2()
{
setlinecolor(RGB(255,131,121));
setlinestyle(PS_SOLID, 5); // 设置线条样式为实线,线宽为3
Point start = {364,301};
Point control1 = {352,242};
Point control2 = {340,157};
Point end = {346,99};
int numPoints = 100; // 指定绘制曲线的精度,即分成多少段
Point start1 = {346,99};
Point control11 = {358,83};
Point control22 = {381,80};
Point end1 = {414,105};
Point start11 = {414,105};
Point control111 = {426,159}; // 第一个控制点
Point control222 = {416,224}; // 第二个控制点
Point end11 = {390,306};
drawBezierCurve(start, control1, control2, end, numPoints); // 绘制贝塞尔曲线
drawBezierCurve(start1, control11, control22, end1, numPoints);
drawBezierCurve(start11, control111, control222, end11, numPoints);
}
void fillCochlea2()
{
// 设置填充颜色和线条样式
setfillcolor(RGB(255, 131, 121));
setlinecolor(RGB(255, 131, 121));
setlinestyle(PS_SOLID, 5); // 设置线条样式为实线,线宽为5
// 定义顶点数组
POINT points[] = {
{364,301},
{352,242},
{340,157},
{346,99},
{358,83},
{381,80},
{414,105},
{426,159},
{416,224},
{390,306}
};
// 绘制多边形并填充
fillpolygon(points, sizeof(points) / sizeof(points[0]));
}