Anecdotally, the cassette player that came with the machine had a misconfigured tape head. Because there was no internet nobody knew why it didn't load most of the games I got with the machine. However, saving and loading programs did work. So, I started writing programs from the user manual and game listings from some programming books I found in the library, and saving them on my cassettes. Because the user manual covered not only some tutorial BASIC but also the machine's graphics, sprites, sounds, and what other features I eventually, after getting some hang of writing BASIC, did also realize that what I could create with the machine hardware itself was virtually unlimited. I didn't necessarily know what the commands did with the underlying hardware but I knew if I poked certain numbers into certain addresses I could make my sprites appear on the screen and make them move around.
By the time I got the cassette player fixed by some computer repair shop, learned about tuning the tape head, and I could finally load all the games bundled with the machine, I was seriously hooked with programming and the highly desired games no longer seemed that interesting in comparison. I knew someone sat down and wrote all those games and instead of playing them I could learn to do the same myself.
Been programming ever since.
Our first family computer was bought back in 1995. IIRC it was a 166 MHz Pentium / 16 MB ram machine with Windows 95. It cost around $3500-4000 back then, and that's not adjusted for inflation.
EDIT: As a side note, 3 years later I managed to get my hands on a copy of Half-Life, right after it was launched. Our computer, with standalone graphics card, was barely able to run the game. Back in those days, being a gamer and chasing cutting edge graphics was really expensive.
Prior to this we had a electric typewriter, and the main purpose of the machine was to be used for writing documents and other business activities. My first experience with programming, was editing HTML files. I then went to the library to look for books on programming, and the only book I could find there (rural nowhere with population 3000) was a book on Pascal, or possibly Delphi.
I was told that there was this one wiz kid in our small rural town that as supposed to be "really good with computers", he was a couple of years old. I hit him up, and the first thing I noticed in his room was this big "Borland C++" box on his shelf - he showed me a basic 3D flight simulator clone he was working on, as well as some sort of Doom clone. I was in awe.
Suffice to say, he did very well during the dot com boom. Skipped college, and went straight into employment.
A couple of years later, when I started in high-school, some older semi-retired developer had recently moved to town. He worked with our school, and offered a Java programming class. Really excellent teacher, and that was the moment I decided I wanted to work with computers.
The first was that my father purchased a PC in the early 1990s to help out with his self-employed publishing business, and like most PCs of the time, it came preloaded with QBasic and the source code for a couple of games like GORILLA.BAS that an introverted kid with a lot of free time could mess around with.
The second was attending a high school with a reasonably well funded computer lab and an unusually open minded computer teacher. If you demonstrated that you were dependable, he'd basically let you do whatever you want. While my school was mostly a Mac shop, I was a bit of a Microsoft shill in high school so by graduation I'd figured out how to stand up and run a Windows NT file & web server for our school newspaper. Another guy was a Linux nut and had been allowed to do something similar with RedHat for the school's drafting lab.
Inclination met opportunity, one thing led to another, and I went on to work with technology for the next 25 years of my life.
What worries me now is that so much technology is so locked down. It must be a very rare school today that allows the kind of freedom we had. There is no IDE preinstalled on a phone, and even merely installing an "unapproved" app is under fire.
If for no other reason, for the sake of the kids the industry, the tools, the operating systems need to be more open. They need to be tinkerable. That's how the most motivated kids tend to learn. Our best and brightest are not being made because we've closed things down to maximize some hedge fund's ROI somewhere. The financialization of America was a grave error.
A bit less with Perl and Python under *nixes where the Idle was about two clicks away.
With C# you would get far more performance and much better support.
Made for some funny exams afterwards...
Edit: well, funny for my adolescent self...
With my kid I want to ensure that fundamentals of computing are understood as early as possible, this is what allows you to understand how the world is interconnected.
This means that you could create cool looking graphics easily. For example, you can just compute the points of a circle and draw the points one by one, and in the screen it will show a full circle being drawn.
"Modern" graphics libs (even SDL I think), made this impossible by having redraw the whole screen every frame so that now my program has to remember all the points there the program drew before to get the same effect.
The former workflow made graphics programming so much fun for me and I find the modern "fast rendering pipeline" boring and not a lot of fun.
Things like that, one by one, have sucked the whole fun out of computing.
For example, do you know what combination of flags listed here https://documentation.help/SDL/sdlsetvideomode.html would do the trick? Or anything that is not listed there would also help.
In the early 80s when the IBM PC hit the scene, Hercules had a graphics card that was amazing and offered better than CGA graphics. I was plinking on it at my dad’s friend’s house, drawing circles and stuff, and on HIS computer the graphics were retained. I had to figure out how to clear the screen, whereas on mine, not having the Hercules card, it wasn’t retained. Never understood what was happening until now.
I also remember running over to the neighbor's to make a copy of a working config file after effing up my config file. (Himem.sys?)
I spent much time carefully typing these things in (spy games, horror games, etc), then even more time designing my own adventure games after reading the adventure titles.
https://community.carbide3d.com/uploads/default/original/3X/...
(If someone knows a good/ideal technique for that, I'd be glad to learn of it --- my math background is kind of shaky)
I'm going to make two assumptions based on your screenshot:
1. The large circles A and B are touching each other
2. You know the radius (a,b,c) of each circle and want the third one (circle C) to touch both of the first two.
What I'd do is place the center of both circles A and B on the same horizontal line and choose a frame of reference such that the center of circle A is the origin, and the center of circle B is placed at coordinates (a+b, 0)
Now we are looking for the coordinates (x, y) of the center of circle C, placed above the x-axis. Which by the way is one of two solutions, as there is a symmetrical circle C' placed below the x-axis, with the coordinates (x, -y)
We know that if we traced a straight line from the center of C, it would intersect the x-axis at a 90° angle. So drawing that line creates two triangles which each have a right angle in this spot:
- one triangle on the left, where the hypothenuse goes from the center of A (0,0) to the center of C (x,y). Its length is the sum of the radii of A and C.
- one triangle on the right, where the hypothenuse goes from the center of B (a+b,0) to the center of C (x,y). Its length is the sum of the radii of B and C.
Both of these triangles share a vertical segment of length (y).
The left triangle's bottom segment has a length of (x) and the right triangle's bottom segment has a length of: (a+b) - x
We know from Pythagore that the square of the length of the hypothenuse is equal to the sum of the squares of the two sides of each triangle, so we know that:
(a+c)^2 = x^2 + y^2
(b+c)^2 = ((a+b) - x)^2 + y^2
So y^2 = (a+c)^2 - x^2 = (b+c)^2 - ((a+b) - x)^2
(a+c)^2 - x^2 = (b+c)^2 - ((a+b) - x)^2
Develop it all a^2 + c^2 + 2ac - x^2 = b^2 + c^2 + 2bc - ((a+b)^2 + x^2 - 2ax - 2bx)
Simplify a^2 + 2ac = b^2 + 2bc - (a^2 + b^2 + 2ab - 2ax - 2bx)
a^2 + 2ac = 2bc - a^2 - 2ab + 2ax + 2bx
2 a^2 + 2ac - 2bc + 2ab = 2ax + 2bx
a^2 + ac + ab - bc
x = ------------------
a+b
and from there you find y, from y^2 = (a+c)^2 - x^2.I did notice that in your screenshot A and B are of the same size, so if you knew this from the start it becomes way simpler.
x = a (of course the center of your new circle is at the vertical of the point where both circles touch, which is obvious due to the symmetry of the problem)
and
y = squareroot(c^2 + 2ac)
I am going to make a link to your comment from the forum post in question:
https://community.carbide3d.com/t/knapp-joint-with-cnc/19723 (scroll all the way to the bottom)
and will hopefully be able to translate that into Open(Python)SCAD code so as to make a generalized solution for my current project: