How, finally i figured out how to make the library and it worked :). Attached in zip file.
Read me contains all information :)
http://www.geocities.com/achillis_sw...library1.0.zip
enjoy :)
Printable View
How, finally i figured out how to make the library and it worked :). Attached in zip file.
Read me contains all information :)
http://www.geocities.com/achillis_sw...library1.0.zip
enjoy :)
feels good to finish a project doesnt it? if your serious about it and want to keep working on it you might consider adding a license to it.
i took a quick look at the header.. i dont think you need an 'about' function, i doubt it would ever be used, but this is of course not my project. (however it COULD be since theres no license or copyright! :p)
also, instead of the .txt file for documentation, i would suggest making a simple HTML page, or even sticking with a .txt file but changing the layout, check other pages for how they describe a class, for example: http://www.cplusplus.com/reference/i.../stringstream/
its much easier than using the FAQ-style documentation you have there.
just some constructive criticism!
If feels good?? It feels greaaaaaaaaaatt
And don't worry about the doc for now :) I will get one on my website as soon as i release stable version :)
how can get license for it btw :)
thank you for your help indeed :)
i dont know anything about applying the license or of many variations of licences, but there are many. one popular one is GPL, check it out: http://www.gnu.org/copyleft/gpl.html. or search around for another licences that you agree with.
ohh it looks hard. I think i'm gonna stick to "about" :S
thank alot for your help :)
You could make it much more simple in terms of memory management. It would be a lot safer as well.
Code:template <class T>
class Matrix
{
public:
Matrix();
// ...
private:
std::vector< std::vector<T> > m_Matrice;
};
i will consider that . I'm in touch with Boost.org, and it seemed from their constant emails that they are interested :)
I'm looking for the stable version that will have more features and more efficient memory management :)
Hi, I released the latest version of the library + full documentation :)
it has some cool new features :) :
+Multiplication
+Addition
+Subtraction
+Getting rows
+Getting columns
http://www.nightvisiongames.com/matrixlib.htm
give it a shot and give me feed back :)
for an official site, check out sourceforge.net or freshmeat.net. they are sites to promote usually free or open source software. try and see if there is a section relevant to your project and upload it. it would be better and would be the central source of news, documentation, and downloads.
edit: your link isnt loading for me
ok, i uploaded the zipped file, it has zipped file of library + header + documentation in a website :)
http://www.geocities.com/achillis_sword/web.zip
enjoy :)
What is the point of matrices? I know they are used a lot, but why?
Edit: Congratulation with finishing this off :)
Fast 3d graphics is basically just raster graphics with a -lot- of matrix operations going on in the background.
Every rotation, every transformation, every scalar operation is a matrix.
Every triangle is a row a different matrix.
try the features of this library :)
First, well done on releasing your first project. next some constructive :p criticism:
- first you absolutely must include some more info in your header file. At the very least, you should put author, date, revision, copyright and warranty disclaimer. Theoretically I could use this code and if it didn't work, I could sue you. (it's not very likely but you should protect yourself). I'd recommend the boost licence, but there are others. to use it you just need to add
Code:// Copyright Hussain Hani 2007.
// Distributed under the Boost Software License, Version 1.0. (See
// http://www.boost.org/LICENSE_1_0.txt)
- why is matrix restricted to floats? you could make the library a template and then users could have matrices of doubles/ints/complex numbers/whatever.
- what happens if I create a Matrix and use it without calling build? will it fail? if so, wouldn't it make more sense to require rows and columns as arguements to the constructor?
- how does print() work? the normal c++ convention would be to make an overloaded '<<' operator. that would work with printing and with files (and any other stream)
- if you're overloading the +, - and * ops it's customary to overload +=, -= and *= too. In fact you should overload those first and then op+ is simply
Code:Matrix operator+(const Matrix& rhs)
{
Matrix result(*this);
result += rhs;
return result;
}
- const correctness - print(), getr(), getc() and about() should be const. op+, - and * should return const Matrix. this prevents accidental mistakes like (m1 * m2 = m3), which is legal but useless in your code.
That's a few points from reading the header. If you want to post the source, I'll have a look at that too. Finally, wrt to boost, they won't accept a closed source library, so you'll have to provide the source. Plus I don't think the library is up to boosts standards yet.
Sorry if that's a bit harsh. Please take the criticism in the spirit in which it's intended, which is to help you improve the library. It's a good first attempt, but it needs work.
and some more: i dont understand why people have to go all out with colors in documents. it happens often by my professors at university, too. i would recommend changing your .htm documentation to simple white background with black text. i dont see a need to make it look like a Doom game!
How do you populate your matrix?
It seems you can only set its dimensions, which, in terms of utility, wouldn't do much for a lot of people.
Also, if I went about looking for a matrix library so I wouldn't have to wrack my brains trying to create one, I'd at least expect functions for deriving:
(1) a determinant
(2) an eigenvector
(3) a transpose
(4) an upper triangle
(5) a lower triangle
(6) an E matrix
(7) addition
(8) subtraction
Answering your first question about the constructor that has to have arguments. I dont agree. When you just simply creat a matrice, the dimensions are zero and the pointers are null, and I tried to stick to original C++ library, like for example the vector
it's much cleaner to say :
Although you could inter some arguments in vector class.Code:Matrix matrix;
//than
Matrix matrix(2,1);
//and
vector<int> intvec;
//than
vector<int> intvec(2,4);
for you question about "why didnt I overload the << operator to show the result instead of print() function)". The answer is that I wanted to keep the library in its OO boundries. I didnt want it to use the C++ built-int that hides it's and actual function. For example, I wanted it to look like this :
so the user will know that he is dealing with library while using the dot operator.Code:matrix.print();
Kinda reminds me of these, plus or minus a few FAQs:
http://parashift.com/c++-faq-lite/in....html#faq-15.8
http://parashift.com/c++-faq-lite/in....html#faq-15.9
I rarely see the GPL used for projects such as this, if ever. Libraries more commonly use the LGPL, whereas applications use the GPL.Quote:
one popular one is GPL
Congrats on your library. More constructive (I hope) criticism.
- about() - This function has no parameters and returns no data. How does one go about getting info about the library if it does neither? Does it merely print it to stdout? If it does, I'd recommend not to - as an application developer I want to have control over how and what data gets outputted. Also, about() is a member function of Matrix, meaning I have to declare and allocate memory to a Martix just to get info on the library. You might want about to be static, since it has (as far as I can tell) no need to read/write any data in the class.
- Is there any way in gcc/MinGW to use .lib files? Otherwise, I can't test the library. (I'm thinking that g++ doesn't like MSVC's name mangling, but I could be way off here...) (And yes, I tried "g++ -o test.exe test.cpp matrix.lib" - undef'd references to Matrix::*)
I don't think so. You would have to recompile the source anyway or wait for Hani to release an a file. While looking for the answer I was directed to some GNU stuff. My hunch was something with -I and -L: According to the manual -L dir only expands the search path for -l by dir. And the only thing -lfoo does is look for libfoo.a which is useless here. I don't think there's another way to do it.Quote:
Is there any way in gcc/MinGW to use .lib files? Otherwise, I can't test the library. (I'm thinking that g++ doesn't like MSVC's name mangling, but I could be way off here...) (And yes, I tried "g++ -o test.exe test.cpp matrix.lib" - undef'd references to Matrix::*)
Actually you didn't answer my question. I asked you what happens if I don't call build? does your library check for the null pointers? will it throw an exception? crash?
as for vector,
- vector is in a usable state when default constructed. you can perform push_back, reserve, resize, etc. Also a vectors purpose is to be a dynamically resizeable array. it grows as you need it. a matrix is a fixed size.
- vector has a "size constructor"
In general, it is bad design for a class that is default constructable to be in an invalid state after construction.
sorry, that's just wrong. read the links Dave posted (esp the second one)