python三维向量运算_使用Python编写一个三维向量,实现向量的加法减法,点乘叉乘...

#  --coding: gb2312--

class vector3:

def __init__(self, x_ = 0, y_ = 0, z_ = 0): #构造函数

self.x = x_

self.y = y_

self.z = z_

def __add__(self, obj): #重载+作为加号

return vector3(self.x+obj.x, self.y+obj.y, self.z+obj.z)

def __sub__(self, obj): #重载-作为减号

return vector3(self.x-obj.x, self.y-obj.y, self.z-obj.z)

def __mul__(self, obj): #重载*作为点乘

return vector3(self.x*obj.x, self.y*obj.y, self.z*obj.z)

def __pow__(self, obj): #重载**作为叉乘。不好,偏离了常理上的意义,可以考虑重载其他符号,或者直接写函数。

return vector3(self.y*obj.z-obj.y*self.z, self.z*obj.x-self.x*obj.z, self.x*obj.y-obj.x*self.y)

def __str__(self): #供print打印的字符串

return str(self.x)+','+str(self.y)+','+str(self.z)

v1 = vector3(1, 2, 3)

v2 = vector3(0, 1, 2)

print v1 + v2

print v1 - v2

print v1 * v2

print v1 ** v2

结果:

  • 10
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1、 一个三维向量类,并定义相应的特殊方法实现两个该类对象之间的加、减运算(要求支持运算符+、-),实现该类对象与标量的乘、除运算(要求支持运算符*、/),以及向量长度的计算(要求使用属性实现)。 2、 编程实现如下功能: (1)定义一个抽象类Shape,在抽象类 Shape定义求面积 getArea()和周长 getPerimeter()的抽象方法。 (2)分别定义继承抽象类Shape的3个子类即Triangle、Rectangle、和Circle,在这3个子类重写 Shape的方法getArea()和 getPerimeter( )。 (3)创建类Triangle、 Rectangle、 Circle的对象,对3个类的方法进行调用测试。 3、使用第六章(王雷春版)介绍的知识设计一个“书籍出租管理系统”,该系统包括以下功能。 (1) 菜单项“1”:显示书籍(包括书籍名称、价格和借出状态)。 (2) 菜单项“2”:增加书籍(包括书籍名称和价格)。 (3) 菜单项“3”:借出书籍(包括借出书籍名称和借出天数)。 (4) 菜单项“4”:归还书籍(包括归还书籍名称和应付的租书费)。 (5) 菜单项“5”:统计书籍(包括借出书籍册数、未借出书籍册数和总册数)。 (6) 菜单项“-1”:退出系统。 体会利用面向对象编程的思想。 4、设计一个“超市进销存管理系统”,要求如下: (1)系统包括7种操作,分别是:1查询所有商品;2添加商品;3修改商品;4.删除商品;5卖出端口;6.汇总;-1.退出系统。 (2)选择操作序号“1”,显示所有商品 (3)选择操作序号“2”,添加新的商品(包括商品名称、数量和进货价格)。 (4)选择操作序号“3”,修改商品 (5)选择操作序号“4”,删除商品 (6)选择操作序号“5”,卖出商品(包括商品名称、数量和售出价格)。 (7)选择操作序号“6”,汇总当天卖出商品,包括每种销售商品名称、数量、进货总价、销售总价等。 (8)选择操作序号“-1”,退出系统。
以下是一个简单的C++三维向量类的示例代码,包含了向量加、减、点乘叉乘运算: ```cpp #include <iostream> #include <cmath> using namespace std; class Vector3D { public: Vector3D() : x(0), y(0), z(0) {} Vector3D(double x, double y, double z) : x(x), y(y), z(z) {} Vector3D operator+(const Vector3D& v) const { return Vector3D(x + v.x, y + v.y, z + v.z); } Vector3D operator-(const Vector3D& v) const { return Vector3D(x - v.x, y - v.y, z - v.z); } double operator*(const Vector3D& v) const { return x * v.x + y * v.y + z * v.z; } Vector3D operator^(const Vector3D& v) const { return Vector3D(y * v.z - z * v.y, z * v.x - x * v.z, x * v.y - y * v.x); } double length() const { return sqrt(x * x + y * y + z * z); } void normalize() { double len = length(); if (len != 0) { x /= len; y /= len; z /= len; } } void print() const { cout << "(" << x << ", " << y << ", " << z << ")" << endl; } private: double x, y, z; }; int main() { Vector3D v1(1, 2, 3); Vector3D v2(4, 5, 6); Vector3D v3 = v1 + v2; v3.print(); Vector3D v4 = v1 - v2; v4.print(); double dot_product = v1 * v2; cout << "Dot Product: " << dot_product << endl; Vector3D cross_product = v1 ^ v2; cross_product.print(); return 0; } ``` 该类实现向量加、减、点乘叉乘运算,以及向量的长度归一化和输出功能。在主函数,我们创建了两个三维向量v1和v2,并使用运算符重载实现向量加、减、点乘叉乘运算。最后,我们输出了向量点乘叉乘结果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值