/***************************************************************************
** **
** QCustomPlot, an easy to use, modern plotting widget for Qt **
** Copyright (C) 2011-2022 Emanuel Eichhammer **
** **
** This program is free software: you can redistribute it and/or modify **
** it under the terms of the GNU General Public License as published by **
** the Free Software Foundation, either version 3 of the License, or **
** (at your option) any later version. **
** **
** This program is distributed in the hope that it will be useful, **
** but WITHOUT ANY WARRANTY; without even the implied warranty of **
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the **
** GNU General Public License for more details. **
** **
** You should have received a copy of the GNU General Public License **
** along with this program. If not, see http://www.gnu.org/licenses/. **
** **
****************************************************************************
** Author: Emanuel Eichhammer **
** Website/Contact: https://www.qcustomplot.com/ **
** Date: 06.11.22 **
** Version: 2.1.1 **
****************************************************************************/
#include "qcustomplot.h"
/* including file 'src/vector2d.cpp' */
/* modified 2022-11-06T12:45:56, size 7973 */
////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////// QCPVector2D
////////////////////////////////////////////////////////////////////////////////////////////////////
/*! \class QCPVector2D
\brief Represents two doubles as a mathematical 2D vector
This class acts as a replacement for QVector2D with the advantage of double precision instead of
single, and some convenience methods tailored for the QCustomPlot library.
*/
/* start documentation of inline functions */
/*! \fn void QCPVector2D::setX(double x)
Sets the x coordinate of this vector to \a x.
\see setY
*/
/*! \fn void QCPVector2D::setY(double y)
Sets the y coordinate of this vector to \a y.
\see setX
*/
/*! \fn double QCPVector2D::length() const
Returns the length of this vector.
\see lengthSquared
*/
/*! \fn double QCPVector2D::lengthSquared() const
Returns the squared length of this vector. In some situations, e.g. when just trying to find the
shortest vector of a group, this is faster than calculating \ref length, because it avoids
calculation of a square root.
\see length
*/
/*! \fn double QCPVector2D::angle() const
Returns the angle of the vector in radians. The angle is measured between the positive x line and
the vector, counter-clockwise in a mathematical coordinate system (y axis upwards positive). In
screen/widget coordinates where the y axis is inverted, the angle appears clockwise.
*/
/*! \fn QPoint QCPVector2D::toPoint() const
Returns a QPoint which has the x and y coordinates of this vector, truncating any floating point
information.
\see toPointF
*/
/*! \fn QPointF QCPVector2D::toPointF() const
Returns a QPointF which has the x and y coordinates of this vector.
\see toPoint
*/
/*! \fn bool QCPVector2D::isNull() const
Returns whether this vector is null. A vector is null if \c qIsNull returns true for both x and y
coordinates, i.e. if both are binary equal to 0.
*/
/*! \fn QCPVector2D QCPVector2D::perpendicular() const
Returns a vector perpendicular to this vector, with the same length.
*/
/*! \fn double QCPVector2D::dot() const
Returns the dot/scalar product of this vector with the specified vector \a vec.
*/
/* end documentation of inline functions */
/*!
Creates a QCPVector2D object and initializes the x and y coordinates to 0.
*/
QCPVector2D::QCPVector2D() :
mX(0),
mY(0)
{
}
/*!
Creates a QCPVector2D object and initializes the \a x and \a y coordinates with the specified
values.
*/
QCPVector2D::QCPVector2D(double x, double y) :
mX(x),
mY(y)
{
}
/*!
Creates a QCPVector2D object and initializes the x and y coordinates respective coordinates of
the specified \a point.
*/
QCPVector2D::QCPVector2D(const QPoint &point) :
mX(point.x()),
mY(point.y())
{
}
/*!
Creates a QCPVector2D object and initializes the x and y coordinates respective coordinates of
the specified \a point.
*/
QCPVector2D::QCPVector2D(const QPointF &point) :
mX(point.x()),
mY(point.y())
{
}
/*!
Normalizes this vector. After this operation, the length of the vector is equal to 1.
If the vector has both entries set to zero, this method does nothing.
\see normalized, length, lengthSquared
*/
void QCPVector2D::normalize()
{
if (mX == 0.0 && mY == 0.0) return;
const double lenInv = 1.0/length();
mX *= lenInv;
mY *= lenInv;
}
/*!
Returns a normalized version of this vector. The length of the returned vector is equal to 1.
If the vector has both entries set to zero, this method returns the vector unmodified.
\see normalize, length, lengthSquared
*/
QCPVector2D QCPVector2D::normalized() const
{
if (mX == 0.0 && mY == 0.0) return *this;
const double lenInv = 1.0/length();
return QCPVector2D(mX*lenInv, mY*lenInv);
}
/*! \overload
Returns the squared shortest distance of this vector (interpreted as a point) to the finite line
segment given by \a start and \a end.
\see distanceToStraightLine
*/
double QCPVector2D::distanceSquaredToLine(const QCPVector2D &start, const QCPVector2D &end) const
{
const QCPVector2D v(end-start);
const double vLengthSqr = v.lengthSquared();
if (!qFuzzyIsNull(vLengthSqr))
{
const double mu = v.dot(*this-start)/vLengthSqr;
if (mu < 0)
return (*this-start).lengthSquared();
else if (mu > 1)
return (*this-end).lengthSquared();
else
return ((start + mu*v)-*this).lengthSquared();
} else
return (*this-start).lengthSquared();
}
/*! \overload
Returns the squared shortest distance of this vector (interpreted as a point) to the finite line
segment given by \a line.
\see distanceToStraightLine
*/
double QCPVector2D::distanceSquaredToLine(const QLineF &line) const
{
return distanceSquaredToLine(QCPVector2D(line.p1()), QCPVector2D(line.p2()));
}
/*!
Returns the shortest distance of this vector (interpreted as a point) to the infinite straight
line given by a \a base point and a \a direction vector.
\see distanceSquaredToLine
*/
double QCPVector2D::distanceToStraightLine(const QCPVector2D &base, const QCPVector2D &direction) const
{
return qAbs((*this-base).dot(direction.perpendicular()))/direction.length();
}
/*!
Scales this vector by the given \a factor, i.e. the x and y components are multiplied by \a
factor.
*/
QCPVector2D &QCPVector2D::operator*=(double factor)
{
mX *= factor;
mY *= factor;
return *this;
}
/*!
Scales this vector by the given \a divisor, i.e. the x and y components are divided by \a
divisor.
*/
QCPVector2D &QCPVector2D::operator/=(double divisor)
{
mX /= divisor;
mY /= divisor;
return *this;
}
/*!
Adds the given \a vector to this vector component-wise.
*/
QCPVector2D &QCPVector2D::operator+=(const QCPVector2D &vector)
{
mX += vector.mX;
mY += vector.mY;
return *this;
}
/*!
subtracts the given \a vector from this vector component-wise.
*/
QCPVector2D &QCPVector2D::operator-=(const QCPVector2D
没有合适的资源?快使用搜索试试~ 我知道了~
qt 实现初高中主要函数图像展示、演示
共222个文件
cpp:39个
h:32个
dylib:28个
需积分: 5 4 下载量 95 浏览量
2023-11-30
14:27:35
上传
评论 1
收藏 32.53MB ZIP 举报
温馨提示
1、qt 实现初高中主要函数图像展示、演示包括,二次函数,三次函数,幂函数,指数函数,对数函数,正弦函数,正切函数,组合函数等图像展示。同时演示函数图像的移动。 2、这儿是实现了一个自定义函数公式的功能,虽然做的比较初级,用了编译原理的内容,这个是借用了csdn友人的计算器的代码改造的。 3、图像可以保存为pdf,jpg等 4、所有图像的公式可以保存,后期可以再次调出来。 5、借用QCustomPlot实现图像显示,并做了相应的增强。 大家互相学习的原则,主要是为了帮助老师们有个函数图像演示的功能。
资源推荐
资源详情
资源评论
收起资源包目录
qt 实现初高中主要函数图像展示、演示 (222个子文件)
qt.conf 78B
qt.conf 78B
qcustomplot.cpp 1.25MB
qcustomplot.cpp 1.25MB
moc_qcustomplot.cpp 305KB
mainwindow.cpp 102KB
mainwindow.cpp 92KB
calculator_ui.cpp 23KB
dialog_cal.cpp 22KB
dialog_cal.cpp 21KB
moc_mainwindow.cpp 13KB
moc_calculators.cpp 8KB
XxwTracer.cpp 7KB
XxwTracer.cpp 7KB
parser.cpp 6KB
parser.cpp 6KB
token.cpp 5KB
token.cpp 5KB
moc_tmylabel.cpp 4KB
tabwidget.cpp 3KB
tabwidget.cpp 3KB
qcpdocumentobject.cpp 3KB
qcpdocumentobject.cpp 3KB
moc_qcpdocumentobject.cpp 3KB
moc_XxwCustomPlot.cpp 3KB
moc_XxwCustomPlot.cpp 3KB
moc_tabwidget.cpp 3KB
moc_XxwTracer.cpp 3KB
moc_XxwTracer.cpp 3KB
XxwCustomPlot.cpp 2KB
XxwCustomPlot.cpp 2KB
tmylabel.cpp 696B
tmylabel.cpp 696B
icon_style.cpp 638B
icon_style.cpp 638B
calculators.cpp 431B
dialog.cpp 230B
main.cpp 172B
main.cpp 172B
myhelper.cpp 88B
myhelper.cpp 88B
gray.css 8KB
black.css 8KB
blue.css 8KB
navy.css 8KB
Current 1B
Current 1B
Current 1B
Current 1B
Current 1B
Current 1B
Current 1B
Current 1B
Current 1B
Current 1B
.DS_Store 10KB
.DS_Store 6KB
.DS_Store 6KB
libqcocoa.dylib 1.59MB
libqcocoa.dylib 1.59MB
libqwebp.dylib 596KB
libqwebp.dylib 596KB
libqtiff.dylib 431KB
libqtiff.dylib 431KB
libqjpeg.dylib 257KB
libqjpeg.dylib 257KB
libqsvgicon.dylib 46KB
libqsvgicon.dylib 46KB
libqicns.dylib 45KB
libqicns.dylib 45KB
libqsvg_debug.dylib 40KB
libqsvg_debug.dylib 40KB
libqgif.dylib 38KB
libqgif.dylib 38KB
libqico.dylib 36KB
libqico.dylib 36KB
libqsvg.dylib 32KB
libqsvg.dylib 32KB
libqmacjp2.dylib 31KB
libqmacjp2.dylib 31KB
libqwbmp.dylib 30KB
libqwbmp.dylib 30KB
libqtga.dylib 30KB
libqtga.dylib 30KB
libcocoaprintersupport.dylib 28KB
libcocoaprintersupport.dylib 28KB
Functions 3.57MB
Functions 3.57MB
qcustomplot.h 303KB
qcustomplot.h 303KB
ui_mainwindow.h 30KB
ui_mainwindow.h 29KB
ui_dialog_cal.h 26KB
moc_predefs.h 13KB
ui_calculators.h 9KB
mainwindow.h 4KB
mainwindow.h 4KB
calculator_ui.h 3KB
qcpdocumentobject.h 3KB
qcpdocumentobject.h 3KB
共 222 条
- 1
- 2
- 3
资源评论
yingri
- 粉丝: 9
- 资源: 16
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功