Developing Pythagoras Triangle
Hi.. Im new to JAVA and i need to develop a program where i can build a Right angle triangle to start with and eventually move the vertexs of the triangle and see the lengths change in such a way that the proof still holds i.e. a^2 + b^2 = c^2
is always true
the user should be able to move the triangle and drag the vertexs and incease the lengths of any side.
Please help me with CODE AND HOW TO BEGIN WITH
all help is greatly appreciated..
THanks
Sharan
This isn't a great medium for personalized tutoring. Please ask specific questions. If you need additional resources for learning Java, please take a look at the following:
The Java Tutorial - A practical guide for programmers
Essentials, Part 1, Lesson 1: Compiling & Running a Simple Program
New to Java Center
How To Think Like A Computer Scientist
Introduction to Computer Science using Java
The Java Developers Almanac 1.4
JavaRanch: a friendly place for Java greenhorns
jGuru
Object-Oriented Programming Concepts
Object-oriented language basics
Don't Fear the OOP
Books:
Bruce Eckel's Thinking in Java (Free online)
Joshua Bloch's Effective Java
Bert Bates and Kathy Sierra's Head First Java
Similar Messages
-
Need help to develop Pythagoras theorem-
Hi i need help to develop proofs 2,3,4
of pythagoras theorems in java as demonstrations
These are applets can anyone help me with it or give me an idea of how to go about developing it -
the site is the following
http://www.uni-koeln.de/ew-fak/Mathe/Projekte/VisuPro/pythagoras/pythagoras.html
then double click on the screen to make it startPardon my ASCII art, but I've always liked the following, simple, geometric proof:
a b
---------------------------------------+
| | |
a| I | II |
| | |
---------------------------------------+
| | |
| | |
| | |
| | |
| | |
b| IV | III |
| | |
| | |
| | |
| | |
| | |
| | |
---------------------------------------+It almost goes without saying that I+II+III+IV == (a+b)^2, and II == IV == a*b,
I == a*a and III == b*b, showing that (a+b)^2 == a^2+a*b+a*b+b^2.
I hope the following sketch makes sense, stand back, ASCII art alert again: a b
---------------------------------------+
| . VI |
| . . |a
| V . |
| +
| |
| . |
b| . |
| |
| IX |
| . |
| . |b
| |
+ |
| . |
a| . . VII |
| VIII . |
---------------------------------------+
a bThe total area equals (a+b)^2 again and equals the sum of the smaller areas:
(a+b)^2 == V+VI+VII+VIII+IX. Let area IX be c^2 for whatever c may be.
V+VII == VI+VIII == a*b, so a^2+b^2+2*ab= c^2+2*a*b; IOW a^2+b^2 == c^2
Given this fundamental result, the others can easily be derived from this one,
or did I answer a question you didn't ask?
kind regards,
Jos -
Quick develop module doesn't show with cursor movement
Somehow, the little triangle that opens and closes the Quick Develop Module in my Library has become solid, so it no longer pops the menu open when I glide my cursor over to the right side of a full screen image. How do I get the Quick develop module triangle to have that shadow look again so that when I glide the cursor to it the module opens.
I must have changed this with a keystroke or something but for the life of me I cannot get it back and it's driving me crazy. I do not like the module open all the time and it's a pain to use the keystroke or click the triangle each time I need to make a quick adjustment. I hope this is not an upgrade change. I notice it is the same in my develop module.
Please help me get my little shadow back, ha.
Thanks,
DennisSaWEET! Thank you so much. Back in business!
Thanks again,
Dennis -
Expanding iTunes fields to handle more info about each CD (Mac & PC)
The LP and CD covers often hold a lot of important info about the album, music and artist, producer, history. With the use of physical album covers on the decline as we use iTunes/mp3s more and more, a lot of liner notes and credits are no longer with our music. iTunes doesn't even have a field for Producer or engineer! But what about cover art or room for the players on the records, etc. (can you tell I used to work at record companies?
I think iTunes needs to be redesigned to take the place of a CD jewel box so we can get much if not all of the info on the digital album. Even a tab for additional artwork as some CDs have not just front cover art but also back cover or what about the box set where there's the boxset art but each CD has it's own CD cover art. Currently I just use the art from the CDs but then lose the art from the outer box, which I would like to be able to include in the future.
The current Comments fields is WAY too small I'm thinking you could as a tab that would be fore the entire record like the size of lyrics so you could put all the players, liner notes, quotes, etc. in an unstructured way and be able to see most of the data without having to scroll so much.You can associate a PDF with an album and put as much or as little information in it as you want. Some album downloads come with digital booklets which may, but often don't, replicate all the information from the original packaging.
You can also embed additional artwork images in a files tag. Files with multiple images develop two triangles at the top of the artwork box to let you switch between the available images.
While I agree the artificial limit of 255 characters for Comments in iTunes is annoying if you put any such information into the Lyrics field there is the bonus that it can actually be viewed from your devices.
tt2 -
Pythagoras integer sides triangle
Absolute beginner needs tips!!
I need to make a program that gives me triangles with only integer numbers using a2+b2=c2.
Here's my code, it works but it gives me double results as you can see. How can I improve, just using code I already now? (loop statements, conditions etc..)
Thanks for any tips
// Ex. 5.21 Pythagorian triples
public class Pythagorian
public static void main( String args[] )
int a = 0;
int b = 0;
int c = 0;
for( a = 1 ; a <= 9 ; a++ )
for( b = 1 ; b <= 9 ; b++ )
for ( c = 1 ; c <= 100 ; c ++)
if ((c*c)==(a*a + b*b))
System.out.printf( "A is %d and B is%d and C is %d\n" , a , b, c);
} // end b
} // end a
} // end main
} // end classI assume you are getting both:
3 4 5
and
4 3 5
Make your 'b' loop only process numbers that are equal or greater than 'a' ('equal' won't give you a Pythagorean triple, anyway, so you could probably skip it). -
Hi everyone - I am developing various proofs of the pythagora's theorem
and the following code draws a triangle on screen and the proof follows -
but i need to know how to drag the triangle such tht 1 angle is always set to 90 degrees.
i.e. i need to resize the triangle by dragging its vertex points by which the1 angle remains at 90 no matter what the size.
The proof has got some graphics code hardcoded in it - i.e. LINES AND POLYGONS have been hardcoded
i need to reconfigure that such that everytime the user increases the size of the triagnle and clicks on next it draws the lines and polygons in the correct area and place
PLEASE HELP
the code is as follows
MAIN CLASS
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.*;
import java.awt.event.*;
import java.text.*;
import javax.swing.*;
public class TestProof {
TestControl control; // the controls for the visual proof
TestView view; // the drawing area to display proof
// called upon class creation
public TestProof() {
view = new TestView();
view.setBackground(Color.WHITE);
control = new TestControl(view);
Frame f = new Frame("Pythagoras");
f.add(view,"Center");
f.add(control,"South");
f.setSize(600,600);
f.setBackground(Color.lightGray);
f.addMouseMotionListener(
new MouseMotionListener() { //anonymous inner class
//handle mouse drag event
public void mouseMoved(MouseEvent e) {
System.out.println("Mouse " + e.getX() +"," + e.getY());
public void mouseDragged(MouseEvent e) {
System.out.println("Draggg: x=" + e.getX() + "; y=" + e.getY());
JMenu File = new JMenu("File");
JMenuItem Exit = new JMenuItem("Exit");
Exit.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
ExitActionPerformed(evt);
JMenuBar menuBar = new JMenuBar();
menuBar.add(File);
File.add(Exit);
f.add(menuBar,"North");
f.show();
private JMenuBar getMenuBar() {
JMenu File = new JMenu("File");
JMenuItem Exit = new JMenuItem("Exit");
Exit.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
ExitActionPerformed(evt);
JMenuBar menuBar = new JMenuBar();
menuBar.add(File);
File.add(Exit);
return menuBar;
private void ExitActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
System.exit(0);
// for standalone use
public static void main(String args[]) {
TestProof TP = new TestProof();
}Test VIEW
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.geom.*;
import java.text.*;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class TestView extends Canvas {
int TRANSLUCENT = 1;
int sequence; // sequencer that determines what should be drawn
// notes matter
int noteX = 100; // note coordinates
int noteY = 60;
int fontSize = 11; // font size
int lineSpacing // space between two consecutive lines
= fontSize + 2;
Font noteFaceFont; // font used to display notes
// objects matter
Polygon tri; // right-angled triangle with sides A, B, and C
Polygon tri1;
Polygon sqrA; // square with side of length A
Polygon sqrB; // square with side of length B
Polygon sqrC; // square with side of length C
Polygon parA; // parallelogram of base A and height A
Polygon parB; // parallelogram of base B and height B
Polygon poly1;
Polygon poly2;
Polygon poly3;
Polygon poly4;
Polygon poly5;
Polygon poly6;
int X0 = 350; // coordinates of triangle
int Y0 = 350;
int A = 90;//60; // triangle size
int B = 120;//80;
int C = 150;//100;
//CORDS of 2nd triangle
int X1 = 350;
int Y1 = 500;
// notes: three lines per note
String notes[] = {
// note 0
// note 1
// note 2
// note 3
// note 4
// note 5
// note 6
// note 7
// note 8
// note 9
// note 10
// note 11
// note 12
// note 13
// note 14
// constructor
public TestView() {
addMouseMotionListener(
new MouseMotionListener() { //anonymous inner class
//handle mouse drag event
public void mouseMoved(MouseEvent e) {
System.out.println("Mouse " + e.getX() +"," + e.getY());
public void mouseDragged(MouseEvent e) {
System.out.println("Draggg: x=" + e.getX() + "; y=" + e.getY());
// set font
noteFaceFont = new Font("TimesRoman", Font.PLAIN, fontSize);
// (coordinates specified w.r.t. to P0, unless otherwise specified)
// create the triangle
tri = new Polygon();
tri.addPoint(0, 0); // add P0 coordinate
tri.addPoint(A*A/C, -A*B/C); // add A3 coordinate
tri.addPoint(C, 0); // add C1 coordinate
tri.translate(X0, Y0); // place triangle
tri1 = new Polygon();
tri1.addPoint(0,0); // add P0 coordinate
tri1.addPoint(A*A/C +38, +A*B/C); // add A3 coordinate
tri1.addPoint(C, 0); // add C1 coordinate
tri1.translate(X1, Y1);
// create square of side A
sqrA = new Polygon();
sqrA.addPoint(0, 0); // add P0 coordinate
sqrA.addPoint(-A*B/C, -A*A/C); // add A1 coordinate
sqrA.addPoint(-A*(B-A)/C, -A*(A+B)/C); // add A2 coordinate
sqrA.addPoint(A*A/C, -A*B/C); // add A3 coordinate
sqrA.translate(X0, Y0); // place square
// create square of side B
// warning: the coordinate of this object are specified relative to C1
sqrB = new Polygon();
sqrB.addPoint(0, 0); // add C1 coordinate
sqrB.addPoint(B*A/C, -B*B/C); // add B1 coordinate
sqrB.addPoint(B*(A-B)/C, -B*(A+B)/C); // add B2 coordinate
sqrB.addPoint(-B*B/C, -B*A/C); // add A3 coordinate
sqrB.translate(X0 + C, Y0); // place square
// create square of side C
sqrC = new Polygon();
sqrC.addPoint(0, 0); // add P0 coordinate
sqrC.addPoint(C, 0); // add C1 coordinate
sqrC.addPoint(C, C); // add C2 coordinate
sqrC.addPoint(0, C); // add C3 coordinate
sqrC.translate(X0, Y0); // place square
poly1 = new Polygon();
poly1.addPoint(405,279);
poly1.addPoint(413,350);
poly1.addPoint(432,500);
poly1.addPoint(442,571);
poly1.addPoint(500,500);
poly1.addPoint(500,350);
poly2 = new Polygon();
poly2.addPoint(279,297);
poly2.addPoint(404,280);
poly2.addPoint(571,254);
poly2.addPoint(500,350);
poly2.addPoint(350,350);
//Polygon 3
poly3 = new Polygon();
poly3.addPoint(404,280);
poly3.addPoint(350,350);
poly3.addPoint(414,350);
poly4 = new Polygon();
poly4.addPoint(350,350);
poly4.addPoint(350,500);
poly4.addPoint(442,572);
poly4.addPoint(433,500);
poly4.addPoint(414,350);
poly5 = new Polygon();
poly5.addPoint(476,183);
poly5.addPoint(332,225);
poly5.addPoint(278,295);
poly5.addPoint(404,279);
poly5.addPoint(571,254);
poly6= new Polygon();
poly6.addPoint(405,278);
poly6.addPoint(332,224);
poly6.addPoint(476,182);
// create parallelogram of height A
parA = new Polygon();
parA.addPoint(0, 0); // add P0 coordinate
parA.addPoint(0, C); // add C3 coordinate
parA.addPoint(A*A/C, C - A*B/C); // add Q0 coordinate
parA.addPoint(A*A/C, -A*B/C); // add A3 coordinate
parA.translate(X0,Y0); // place parallelogram
// create parallelogram of height B
// warning: the coordinate of this object are specified from C1
parB = new Polygon();
parB.addPoint(0, 0); // add C1 coordinate
parB.addPoint(-B*B/C, -B*A/C); // add A3 coordinate
parB.addPoint(A*A/C - C, C - A*B/C); // add Q0 coordinate
parB.addPoint(0, C); // add C2 coordinate
parB.translate(X0 + C, Y0);
// place parallelogram
// depending on the sequence number we draw certain objects
public void paint(Graphics gfx) {
super.paint(gfx);
Graphics2D g = (Graphics2D) gfx;
g.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
// text first, then objects (and animation)
// we always output some notes
g.drawString(notes[3*sequence], noteX, noteY);
g.drawString(notes[3*sequence + 1], noteX, noteY + lineSpacing);
g.drawString(notes[3*sequence + 2], noteX, noteY + 2*lineSpacing);
// the object are drawn in an order so that they are properly overlapped
if(sequence == 13) {
g.setColor(Color.green);
g.fillPolygon(poly1);
g.fillPolygon(poly2);
g.fillPolygon(poly3);
g.fillPolygon(poly4);
g.fillPolygon(poly5);
g.setColor(Color.RED);
g.setColor(Color.GREEN);
g.drawLine(413,351,433,499);
g.setColor(Color.white);
g.fillPolygon(tri);
g.fillPolygon(tri1);
g.fillPolygon(poly6);
if(sequence == 12 ) {
g.setColor(Color.green);
g.fillPolygon(poly1);
g.fillPolygon(poly2);
g.fillPolygon(poly3);
g.fillPolygon(poly4);
g.fillPolygon(poly5);
g.setColor(Color.BLACK);
if(sequence == 11){
g.setColor(Color.green);
g.fillPolygon(poly1);
g.fillPolygon(poly3);
g.fillPolygon(poly4);
g.setColor(Color.BLACK);
if(sequence == 8 ){
g.setColor(Color.green);
g.fillPolygon(poly5);
g.setColor(Color.MAGENTA);
g.drawString("E",578,254);
g.drawString("D",268,302);
g.setColor(Color.black);
g.drawArc(250,150,350,250,320,65);
else if (sequence == 9 ){
g.setColor(Color.green);
g.fillPolygon(poly2);
g.setColor(Color.MAGENTA);
g.drawString("E",578,254);
g.drawString("D",268,302);
g.setColor(Color.black);
g.drawArc(250,150,350,250,320,65);
if( sequence == 10){
g.setColor(Color.green);
g.fillPolygon(poly2);
g.fillPolygon(poly5);
g.setColor(Color.black);
g.setColor(Color.MAGENTA);
g.drawString("E",578,254);
g.drawString("D",268,302);
g.setColor(Color.black);
g.drawArc(250,150,350,250,320,65);
if(sequence == 7){
g.setColor(Color.green);
g.fillPolygon(poly2);
g.setColor(Color.MAGENTA);
g.drawString("E",578,254);
g.drawString("D",268,302);
g.setColor(Color.black);
if(sequence == 6){
g.setColor(Color.yellow);
g.fillPolygon(poly2);
g.setColor(Color.green);
g.fillPolygon(poly3);
g.setColor(Color.blue);
g.fillPolygon(poly4);
g.setColor(Color.black);
g.drawArc(250,175,350,275,300,65);
//g.drawArc(250,150,350,250,320,65);
g.drawLine( 606,309,599,299);
g.drawLine(592,313, 599,299);
g.drawString("+90 degrees",605,378);
if (sequence == 5 ) {
g.setColor(Color.yellow);
g.fillPolygon(poly2);
g.setColor(Color.black);
if (sequence == 4) {
g.setColor(Color.YELLOW);
g.fillPolygon(poly1);
g.setColor(Color.black);
g.drawArc(319,310,250,195,89,-35);
g.drawLine(499,319, 492,312);
g.drawLine(499,319, 492,325);
g.drawArc(200,180, 233,238,-120,-60);
g.drawLine(200,298, 208,309);
g.drawLine(200,298, 194,313);
g.drawString("-90 degrees",227,347);
if (sequence >= 3) {
g.drawLine(404,279,442,572);
// draw the squares
if (sequence >= 2) {
g.drawLine(278,296,572,254);
// draw the squares
if (sequence >= 1) {
g.drawLine(333,224,476,182);
g.drawPolygon(tri1);
// always draw the triangle
g.drawPolygon(tri);
g.drawPolygon(sqrA);
g.drawPolygon(sqrB);
g.drawPolygon(sqrC);
g.setColor(Color.MAGENTA);
g.drawString("C", X0 + C/2 - fontSize/2, Y0 + lineSpacing);
g.drawString("A",
X0 + A*A/(2*C) - fontSize*A/B/2,
Y0 - A*B/(2*C) - lineSpacing*A/B);
g.drawString("B",
X0 + C - B*B/(2*C) - fontSize*A/B/2,// the last "-" isn't log.
Y0 - B*A/(2*C) - lineSpacing*A/B);
public void redraw(int sequence) {
this.sequence = sequence;
repaint();
}TEST CONTROL
* TestControl.java
* Created on 28 February 2005, 11:16
import java.awt.*;
import java.awt.event.*;
import java.text.*;
import javax.swing.JFrame;
* @author Kripa Bhojwani
public class TestControl extends Panel implements ActionListener {
TestView view;
int sequence; // event sequence
// constructor
public TestControl(TestView view) {
Button b = null;
Label label = new Label("A^2 ");
this.view = view; // initialize drawble area
sequence = 0; // initialize sequence
b = new Button("Prev");
b.addActionListener(this);
add(b);
b = new Button("Next");
b.addActionListener(this);
add(b);
add(label);
// exported method
public void actionPerformed(ActionEvent ev) {
String label = ev.getActionCommand();
if (label.equals("Prev")) {
if (sequence >0) {
--sequence;
else {
if (sequence < 15) {
++sequence;
this.setEnabled(false); // disable the controls
view.redraw(sequence);
this.setEnabled(true); // enable the controls
}Please help --- really need to sort this out...
THANKSCross post http://forum.java.sun.com/thread.jspa?threadID=603432&messageID=3251958#3251958
-
Need Help to Draw and Drag Triangle - URGENT
Hi everyone - I am developing various proofs of the pythagora's theorem
and the following code draws a triangle on screen and the proof follows -
but i need to know how to drag the triangle such tht 1 angle is always set to 90 degrees.
i.e. i need to resize the triangle by dragging its vertex points by which the1 angle remains at 90 no matter what the size.
The proof has got some graphics code hardcoded in it - i.e. LINES AND POLYGONS have been hardcoded
i need to reconfigure that such that everytime the user increases the size of the triagnle and clicks on next it draws the lines and polygons in the correct area and place
PLEASE HELP
the code is as follows
MAIN CLASS
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.*;
import java.awt.event.*;
import java.text.*;
import javax.swing.*;
public class TestProof {
TestControl control; // the controls for the visual proof
TestView view; // the drawing area to display proof
// called upon class creation
public TestProof() {
view = new TestView();
view.setBackground(Color.WHITE);
control = new TestControl(view);
Frame f = new Frame("Pythagoras");
f.add(view,"Center");
f.add(control,"South");
f.setSize(600,600);
f.setBackground(Color.lightGray);
f.addMouseMotionListener(
new MouseMotionListener() { //anonymous inner class
//handle mouse drag event
public void mouseMoved(MouseEvent e) {
System.out.println("Mouse " + e.getX() +"," + e.getY());
public void mouseDragged(MouseEvent e) {
System.out.println("Draggg: x=" + e.getX() + "; y=" + e.getY());
JMenu File = new JMenu("File");
JMenuItem Exit = new JMenuItem("Exit");
Exit.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
ExitActionPerformed(evt);
JMenuBar menuBar = new JMenuBar();
menuBar.add(File);
File.add(Exit);
f.add(menuBar,"North");
f.show();
private JMenuBar getMenuBar() {
JMenu File = new JMenu("File");
JMenuItem Exit = new JMenuItem("Exit");
Exit.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
ExitActionPerformed(evt);
JMenuBar menuBar = new JMenuBar();
menuBar.add(File);
File.add(Exit);
return menuBar;
private void ExitActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
System.exit(0);
// for standalone use
public static void main(String args[]) {
TestProof TP = new TestProof();
}Test VIEW
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.geom.*;
import java.text.*;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class TestView extends Canvas {
int TRANSLUCENT = 1;
int sequence; // sequencer that determines what should be drawn
// notes matter
int noteX = 100; // note coordinates
int noteY = 60;
int fontSize = 11; // font size
int lineSpacing // space between two consecutive lines
= fontSize + 2;
Font noteFaceFont; // font used to display notes
// objects matter
Polygon tri; // right-angled triangle with sides A, B, and C
Polygon tri1;
Polygon sqrA; // square with side of length A
Polygon sqrB; // square with side of length B
Polygon sqrC; // square with side of length C
Polygon parA; // parallelogram of base A and height A
Polygon parB; // parallelogram of base B and height B
Polygon poly1;
Polygon poly2;
Polygon poly3;
Polygon poly4;
Polygon poly5;
Polygon poly6;
int X0 = 350; // coordinates of triangle
int Y0 = 350;
int A = 90;//60; // triangle size
int B = 120;//80;
int C = 150;//100;
//CORDS of 2nd triangle
int X1 = 350;
int Y1 = 500;
// notes: three lines per note
String notes[] = {
// note 0
// note 1
// note 2
// note 3
// note 4
// note 5
// note 6
// note 7
// note 8
// note 9
// note 10
// note 11
// note 12
// note 13
// note 14
// constructor
public TestView() {
addMouseMotionListener(
new MouseMotionListener() { //anonymous inner class
//handle mouse drag event
public void mouseMoved(MouseEvent e) {
System.out.println("Mouse " + e.getX() +"," + e.getY());
public void mouseDragged(MouseEvent e) {
System.out.println("Draggg: x=" + e.getX() + "; y=" + e.getY());
// set font
noteFaceFont = new Font("TimesRoman", Font.PLAIN, fontSize);
// (coordinates specified w.r.t. to P0, unless otherwise specified)
// create the triangle
tri = new Polygon();
tri.addPoint(0, 0); // add P0 coordinate
tri.addPoint(A*A/C, -A*B/C); // add A3 coordinate
tri.addPoint(C, 0); // add C1 coordinate
tri.translate(X0, Y0); // place triangle
tri1 = new Polygon();
tri1.addPoint(0,0); // add P0 coordinate
tri1.addPoint(A*A/C +38, +A*B/C); // add A3 coordinate
tri1.addPoint(C, 0); // add C1 coordinate
tri1.translate(X1, Y1);
// create square of side A
sqrA = new Polygon();
sqrA.addPoint(0, 0); // add P0 coordinate
sqrA.addPoint(-A*B/C, -A*A/C); // add A1 coordinate
sqrA.addPoint(-A*(B-A)/C, -A*(A+B)/C); // add A2 coordinate
sqrA.addPoint(A*A/C, -A*B/C); // add A3 coordinate
sqrA.translate(X0, Y0); // place square
// create square of side B
// warning: the coordinate of this object are specified relative to C1
sqrB = new Polygon();
sqrB.addPoint(0, 0); // add C1 coordinate
sqrB.addPoint(B*A/C, -B*B/C); // add B1 coordinate
sqrB.addPoint(B*(A-B)/C, -B*(A+B)/C); // add B2 coordinate
sqrB.addPoint(-B*B/C, -B*A/C); // add A3 coordinate
sqrB.translate(X0 + C, Y0); // place square
// create square of side C
sqrC = new Polygon();
sqrC.addPoint(0, 0); // add P0 coordinate
sqrC.addPoint(C, 0); // add C1 coordinate
sqrC.addPoint(C, C); // add C2 coordinate
sqrC.addPoint(0, C); // add C3 coordinate
sqrC.translate(X0, Y0); // place square
poly1 = new Polygon();
poly1.addPoint(405,279);
poly1.addPoint(413,350);
poly1.addPoint(432,500);
poly1.addPoint(442,571);
poly1.addPoint(500,500);
poly1.addPoint(500,350);
poly2 = new Polygon();
poly2.addPoint(279,297);
poly2.addPoint(404,280);
poly2.addPoint(571,254);
poly2.addPoint(500,350);
poly2.addPoint(350,350);
//Polygon 3
poly3 = new Polygon();
poly3.addPoint(404,280);
poly3.addPoint(350,350);
poly3.addPoint(414,350);
poly4 = new Polygon();
poly4.addPoint(350,350);
poly4.addPoint(350,500);
poly4.addPoint(442,572);
poly4.addPoint(433,500);
poly4.addPoint(414,350);
poly5 = new Polygon();
poly5.addPoint(476,183);
poly5.addPoint(332,225);
poly5.addPoint(278,295);
poly5.addPoint(404,279);
poly5.addPoint(571,254);
poly6= new Polygon();
poly6.addPoint(405,278);
poly6.addPoint(332,224);
poly6.addPoint(476,182);
// create parallelogram of height A
parA = new Polygon();
parA.addPoint(0, 0); // add P0 coordinate
parA.addPoint(0, C); // add C3 coordinate
parA.addPoint(A*A/C, C - A*B/C); // add Q0 coordinate
parA.addPoint(A*A/C, -A*B/C); // add A3 coordinate
parA.translate(X0,Y0); // place parallelogram
// create parallelogram of height B
// warning: the coordinate of this object are specified from C1
parB = new Polygon();
parB.addPoint(0, 0); // add C1 coordinate
parB.addPoint(-B*B/C, -B*A/C); // add A3 coordinate
parB.addPoint(A*A/C - C, C - A*B/C); // add Q0 coordinate
parB.addPoint(0, C); // add C2 coordinate
parB.translate(X0 + C, Y0);
// place parallelogram
// depending on the sequence number we draw certain objects
public void paint(Graphics gfx) {
super.paint(gfx);
Graphics2D g = (Graphics2D) gfx;
g.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
// text first, then objects (and animation)
// we always output some notes
g.drawString(notes[3*sequence], noteX, noteY);
g.drawString(notes[3*sequence + 1], noteX, noteY + lineSpacing);
g.drawString(notes[3*sequence + 2], noteX, noteY + 2*lineSpacing);
// the object are drawn in an order so that they are properly overlapped
if(sequence == 13) {
g.setColor(Color.green);
g.fillPolygon(poly1);
g.fillPolygon(poly2);
g.fillPolygon(poly3);
g.fillPolygon(poly4);
g.fillPolygon(poly5);
g.setColor(Color.RED);
g.setColor(Color.GREEN);
g.drawLine(413,351,433,499);
g.setColor(Color.white);
g.fillPolygon(tri);
g.fillPolygon(tri1);
g.fillPolygon(poly6);
if(sequence == 12 ) {
g.setColor(Color.green);
g.fillPolygon(poly1);
g.fillPolygon(poly2);
g.fillPolygon(poly3);
g.fillPolygon(poly4);
g.fillPolygon(poly5);
g.setColor(Color.BLACK);
if(sequence == 11){
g.setColor(Color.green);
g.fillPolygon(poly1);
g.fillPolygon(poly3);
g.fillPolygon(poly4);
g.setColor(Color.BLACK);
if(sequence == 8 ){
g.setColor(Color.green);
g.fillPolygon(poly5);
g.setColor(Color.MAGENTA);
g.drawString("E",578,254);
g.drawString("D",268,302);
g.setColor(Color.black);
g.drawArc(250,150,350,250,320,65);
else if (sequence == 9 ){
g.setColor(Color.green);
g.fillPolygon(poly2);
g.setColor(Color.MAGENTA);
g.drawString("E",578,254);
g.drawString("D",268,302);
g.setColor(Color.black);
g.drawArc(250,150,350,250,320,65);
if( sequence == 10){
g.setColor(Color.green);
g.fillPolygon(poly2);
g.fillPolygon(poly5);
g.setColor(Color.black);
g.setColor(Color.MAGENTA);
g.drawString("E",578,254);
g.drawString("D",268,302);
g.setColor(Color.black);
g.drawArc(250,150,350,250,320,65);
if(sequence == 7){
g.setColor(Color.green);
g.fillPolygon(poly2);
g.setColor(Color.MAGENTA);
g.drawString("E",578,254);
g.drawString("D",268,302);
g.setColor(Color.black);
if(sequence == 6){
g.setColor(Color.yellow);
g.fillPolygon(poly2);
g.setColor(Color.green);
g.fillPolygon(poly3);
g.setColor(Color.blue);
g.fillPolygon(poly4);
g.setColor(Color.black);
g.drawArc(250,175,350,275,300,65);
//g.drawArc(250,150,350,250,320,65);
g.drawLine( 606,309,599,299);
g.drawLine(592,313, 599,299);
g.drawString("+90 degrees",605,378);
if (sequence == 5 ) {
g.setColor(Color.yellow);
g.fillPolygon(poly2);
g.setColor(Color.black);
if (sequence == 4) {
g.setColor(Color.YELLOW);
g.fillPolygon(poly1);
g.setColor(Color.black);
g.drawArc(319,310,250,195,89,-35);
g.drawLine(499,319, 492,312);
g.drawLine(499,319, 492,325);
g.drawArc(200,180, 233,238,-120,-60);
g.drawLine(200,298, 208,309);
g.drawLine(200,298, 194,313);
g.drawString("-90 degrees",227,347);
if (sequence >= 3) {
g.drawLine(404,279,442,572);
// draw the squares
if (sequence >= 2) {
g.drawLine(278,296,572,254);
// draw the squares
if (sequence >= 1) {
g.drawLine(333,224,476,182);
g.drawPolygon(tri1);
// always draw the triangle
g.drawPolygon(tri);
g.drawPolygon(sqrA);
g.drawPolygon(sqrB);
g.drawPolygon(sqrC);
g.setColor(Color.MAGENTA);
g.drawString("C", X0 + C/2 - fontSize/2, Y0 + lineSpacing);
g.drawString("A",
X0 + A*A/(2*C) - fontSize*A/B/2,
Y0 - A*B/(2*C) - lineSpacing*A/B);
g.drawString("B",
X0 + C - B*B/(2*C) - fontSize*A/B/2,// the last "-" isn't log.
Y0 - B*A/(2*C) - lineSpacing*A/B);
public void redraw(int sequence) {
this.sequence = sequence;
repaint();
}TEST CONTROL
* TestControl.java
* Created on 28 February 2005, 11:16
import java.awt.*;
import java.awt.event.*;
import java.text.*;
import javax.swing.JFrame;
* @author Kripa Bhojwani
public class TestControl extends Panel implements ActionListener {
TestView view;
int sequence; // event sequence
// constructor
public TestControl(TestView view) {
Button b = null;
Label label = new Label("A^2 ");
this.view = view; // initialize drawble area
sequence = 0; // initialize sequence
b = new Button("Prev");
b.addActionListener(this);
add(b);
b = new Button("Next");
b.addActionListener(this);
add(b);
add(label);
// exported method
public void actionPerformed(ActionEvent ev) {
String label = ev.getActionCommand();
if (label.equals("Prev")) {
if (sequence >0) {
--sequence;
else {
if (sequence < 15) {
++sequence;
this.setEnabled(false); // disable the controls
view.redraw(sequence);
this.setEnabled(true); // enable the controls
}Please help --- really need to sort this out...
THANKSOne of the problems you face is that it is hard to recognise which parts of your code are drawing the triangle. This is because you are writing code in a procedural way rather than an object oriented way.
In object oriented code you would have a triangle object that could draw itself. You would create the triangle object by specifying its sizes and angles in some way. Then it should be easy to change the triangles sizes and angles and ask all the drawn objects to redraw themselves. -
PYTHAGORAS THEOREM __ URGENT HELP NEEDED
Hi everyone - I am developing various proofs of the pythagora's theorem
and the following code draws a triangle on screen and the proof follows -
but i need to know how to drag the triangle such tht 1 angle is always set to 90 degrees.
i.e. i need to resize the triangle by dragging its vertex points by which the1 angle remains at 90 no matter what the size.
The proof has got some graphics code hardcoded in it - i.e. LINES AND POLYGONS have been hardcoded
i need to reconfigure that such that everytime the user increases the size of the triagnle and clicks on next it draws the lines and polygons in the correct area and place
PLEASE HELP
the code is as follows
MAIN CLASS
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.*;
import java.awt.event.*;
import java.text.*;
import javax.swing.*;
public class TestProof {
TestControl control; // the controls for the visual proof
TestView view; // the drawing area to display proof
// called upon class creation
public TestProof() {
view = new TestView();
view.setBackground(Color.WHITE);
control = new TestControl(view);
Frame f = new Frame("Pythagoras");
f.add(view,"Center");
f.add(control,"South");
f.setSize(600,600);
f.setBackground(Color.lightGray);
f.addMouseMotionListener(
new MouseMotionListener() { //anonymous inner class
//handle mouse drag event
public void mouseMoved(MouseEvent e) {
System.out.println("Mouse " + e.getX() +"," + e.getY());
public void mouseDragged(MouseEvent e) {
System.out.println("Draggg: x=" + e.getX() + "; y=" + e.getY());
JMenu File = new JMenu("File");
JMenuItem Exit = new JMenuItem("Exit");
Exit.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
ExitActionPerformed(evt);
JMenuBar menuBar = new JMenuBar();
menuBar.add(File);
File.add(Exit);
f.add(menuBar,"North");
f.show();
private JMenuBar getMenuBar() {
JMenu File = new JMenu("File");
JMenuItem Exit = new JMenuItem("Exit");
Exit.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
ExitActionPerformed(evt);
JMenuBar menuBar = new JMenuBar();
menuBar.add(File);
File.add(Exit);
return menuBar;
private void ExitActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
System.exit(0);
// for standalone use
public static void main(String args[]) {
TestProof TP = new TestProof();
}Test VIEW
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.geom.*;
import java.text.*;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class TestView extends Canvas {
int TRANSLUCENT = 1;
int sequence; // sequencer that determines what should be drawn
// notes matter
int noteX = 100; // note coordinates
int noteY = 60;
int fontSize = 11; // font size
int lineSpacing // space between two consecutive lines
= fontSize + 2;
Font noteFaceFont; // font used to display notes
// objects matter
Polygon tri; // right-angled triangle with sides A, B, and C
Polygon tri1;
Polygon sqrA; // square with side of length A
Polygon sqrB; // square with side of length B
Polygon sqrC; // square with side of length C
Polygon parA; // parallelogram of base A and height A
Polygon parB; // parallelogram of base B and height B
Polygon poly1;
Polygon poly2;
Polygon poly3;
Polygon poly4;
Polygon poly5;
Polygon poly6;
int X0 = 350; // coordinates of triangle
int Y0 = 350;
int A = 90;//60; // triangle size
int B = 120;//80;
int C = 150;//100;
//CORDS of 2nd triangle
int X1 = 350;
int Y1 = 500;
// notes: three lines per note
String notes[] = {
// note 0
// note 1
// note 2
// note 3
// note 4
// note 5
// note 6
// note 7
// note 8
// note 9
// note 10
// note 11
// note 12
// note 13
// note 14
// constructor
public TestView() {
addMouseMotionListener(
new MouseMotionListener() { //anonymous inner class
//handle mouse drag event
public void mouseMoved(MouseEvent e) {
System.out.println("Mouse " + e.getX() +"," + e.getY());
public void mouseDragged(MouseEvent e) {
System.out.println("Draggg: x=" + e.getX() + "; y=" + e.getY());
// set font
noteFaceFont = new Font("TimesRoman", Font.PLAIN, fontSize);
// (coordinates specified w.r.t. to P0, unless otherwise specified)
// create the triangle
tri = new Polygon();
tri.addPoint(0, 0); // add P0 coordinate
tri.addPoint(A*A/C, -A*B/C); // add A3 coordinate
tri.addPoint(C, 0); // add C1 coordinate
tri.translate(X0, Y0); // place triangle
tri1 = new Polygon();
tri1.addPoint(0,0); // add P0 coordinate
tri1.addPoint(A*A/C +38, +A*B/C); // add A3 coordinate
tri1.addPoint(C, 0); // add C1 coordinate
tri1.translate(X1, Y1);
// create square of side A
sqrA = new Polygon();
sqrA.addPoint(0, 0); // add P0 coordinate
sqrA.addPoint(-A*B/C, -A*A/C); // add A1 coordinate
sqrA.addPoint(-A*(B-A)/C, -A*(A+B)/C); // add A2 coordinate
sqrA.addPoint(A*A/C, -A*B/C); // add A3 coordinate
sqrA.translate(X0, Y0); // place square
// create square of side B
// warning: the coordinate of this object are specified relative to C1
sqrB = new Polygon();
sqrB.addPoint(0, 0); // add C1 coordinate
sqrB.addPoint(B*A/C, -B*B/C); // add B1 coordinate
sqrB.addPoint(B*(A-B)/C, -B*(A+B)/C); // add B2 coordinate
sqrB.addPoint(-B*B/C, -B*A/C); // add A3 coordinate
sqrB.translate(X0 + C, Y0); // place square
// create square of side C
sqrC = new Polygon();
sqrC.addPoint(0, 0); // add P0 coordinate
sqrC.addPoint(C, 0); // add C1 coordinate
sqrC.addPoint(C, C); // add C2 coordinate
sqrC.addPoint(0, C); // add C3 coordinate
sqrC.translate(X0, Y0); // place square
poly1 = new Polygon();
poly1.addPoint(405,279);
poly1.addPoint(413,350);
poly1.addPoint(432,500);
poly1.addPoint(442,571);
poly1.addPoint(500,500);
poly1.addPoint(500,350);
poly2 = new Polygon();
poly2.addPoint(279,297);
poly2.addPoint(404,280);
poly2.addPoint(571,254);
poly2.addPoint(500,350);
poly2.addPoint(350,350);
//Polygon 3
poly3 = new Polygon();
poly3.addPoint(404,280);
poly3.addPoint(350,350);
poly3.addPoint(414,350);
poly4 = new Polygon();
poly4.addPoint(350,350);
poly4.addPoint(350,500);
poly4.addPoint(442,572);
poly4.addPoint(433,500);
poly4.addPoint(414,350);
poly5 = new Polygon();
poly5.addPoint(476,183);
poly5.addPoint(332,225);
poly5.addPoint(278,295);
poly5.addPoint(404,279);
poly5.addPoint(571,254);
poly6= new Polygon();
poly6.addPoint(405,278);
poly6.addPoint(332,224);
poly6.addPoint(476,182);
// create parallelogram of height A
parA = new Polygon();
parA.addPoint(0, 0); // add P0 coordinate
parA.addPoint(0, C); // add C3 coordinate
parA.addPoint(A*A/C, C - A*B/C); // add Q0 coordinate
parA.addPoint(A*A/C, -A*B/C); // add A3 coordinate
parA.translate(X0,Y0); // place parallelogram
// create parallelogram of height B
// warning: the coordinate of this object are specified from C1
parB = new Polygon();
parB.addPoint(0, 0); // add C1 coordinate
parB.addPoint(-B*B/C, -B*A/C); // add A3 coordinate
parB.addPoint(A*A/C - C, C - A*B/C); // add Q0 coordinate
parB.addPoint(0, C); // add C2 coordinate
parB.translate(X0 + C, Y0);
// place parallelogram
// depending on the sequence number we draw certain objects
public void paint(Graphics gfx) {
super.paint(gfx);
Graphics2D g = (Graphics2D) gfx;
g.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
// text first, then objects (and animation)
// we always output some notes
g.drawString(notes[3*sequence], noteX, noteY);
g.drawString(notes[3*sequence + 1], noteX, noteY + lineSpacing);
g.drawString(notes[3*sequence + 2], noteX, noteY + 2*lineSpacing);
// the object are drawn in an order so that they are properly overlapped
if(sequence == 13) {
g.setColor(Color.green);
g.fillPolygon(poly1);
g.fillPolygon(poly2);
g.fillPolygon(poly3);
g.fillPolygon(poly4);
g.fillPolygon(poly5);
g.setColor(Color.RED);
g.setColor(Color.GREEN);
g.drawLine(413,351,433,499);
g.setColor(Color.white);
g.fillPolygon(tri);
g.fillPolygon(tri1);
g.fillPolygon(poly6);
if(sequence == 12 ) {
g.setColor(Color.green);
g.fillPolygon(poly1);
g.fillPolygon(poly2);
g.fillPolygon(poly3);
g.fillPolygon(poly4);
g.fillPolygon(poly5);
g.setColor(Color.BLACK);
if(sequence == 11){
g.setColor(Color.green);
g.fillPolygon(poly1);
g.fillPolygon(poly3);
g.fillPolygon(poly4);
g.setColor(Color.BLACK);
if(sequence == 8 ){
g.setColor(Color.green);
g.fillPolygon(poly5);
g.setColor(Color.MAGENTA);
g.drawString("E",578,254);
g.drawString("D",268,302);
g.setColor(Color.black);
g.drawArc(250,150,350,250,320,65);
else if (sequence == 9 ){
g.setColor(Color.green);
g.fillPolygon(poly2);
g.setColor(Color.MAGENTA);
g.drawString("E",578,254);
g.drawString("D",268,302);
g.setColor(Color.black);
g.drawArc(250,150,350,250,320,65);
if( sequence == 10){
g.setColor(Color.green);
g.fillPolygon(poly2);
g.fillPolygon(poly5);
g.setColor(Color.black);
g.setColor(Color.MAGENTA);
g.drawString("E",578,254);
g.drawString("D",268,302);
g.setColor(Color.black);
g.drawArc(250,150,350,250,320,65);
if(sequence == 7){
g.setColor(Color.green);
g.fillPolygon(poly2);
g.setColor(Color.MAGENTA);
g.drawString("E",578,254);
g.drawString("D",268,302);
g.setColor(Color.black);
if(sequence == 6){
g.setColor(Color.yellow);
g.fillPolygon(poly2);
g.setColor(Color.green);
g.fillPolygon(poly3);
g.setColor(Color.blue);
g.fillPolygon(poly4);
g.setColor(Color.black);
g.drawArc(250,175,350,275,300,65);
//g.drawArc(250,150,350,250,320,65);
g.drawLine( 606,309,599,299);
g.drawLine(592,313, 599,299);
g.drawString("+90 degrees",605,378);
if (sequence == 5 ) {
g.setColor(Color.yellow);
g.fillPolygon(poly2);
g.setColor(Color.black);
if (sequence == 4) {
g.setColor(Color.YELLOW);
g.fillPolygon(poly1);
g.setColor(Color.black);
g.drawArc(319,310,250,195,89,-35);
g.drawLine(499,319, 492,312);
g.drawLine(499,319, 492,325);
g.drawArc(200,180, 233,238,-120,-60);
g.drawLine(200,298, 208,309);
g.drawLine(200,298, 194,313);
g.drawString("-90 degrees",227,347);
if (sequence >= 3) {
g.drawLine(404,279,442,572);
// draw the squares
if (sequence >= 2) {
g.drawLine(278,296,572,254);
// draw the squares
if (sequence >= 1) {
g.drawLine(333,224,476,182);
g.drawPolygon(tri1);
// always draw the triangle
g.drawPolygon(tri);
g.drawPolygon(sqrA);
g.drawPolygon(sqrB);
g.drawPolygon(sqrC);
g.setColor(Color.MAGENTA);
g.drawString("C", X0 + C/2 - fontSize/2, Y0 + lineSpacing);
g.drawString("A",
X0 + A*A/(2*C) - fontSize*A/B/2,
Y0 - A*B/(2*C) - lineSpacing*A/B);
g.drawString("B",
X0 + C - B*B/(2*C) - fontSize*A/B/2,// the last "-" isn't log.
Y0 - B*A/(2*C) - lineSpacing*A/B);
public void redraw(int sequence) {
this.sequence = sequence;
repaint();
}TEST CONTROL
* TestControl.java
* Created on 28 February 2005, 11:16
import java.awt.*;
import java.awt.event.*;
import java.text.*;
import javax.swing.JFrame;
* @author Kripa Bhojwani
public class TestControl extends Panel implements ActionListener {
TestView view;
int sequence; // event sequence
// constructor
public TestControl(TestView view) {
Button b = null;
Label label = new Label("A^2 ");
this.view = view; // initialize drawble area
sequence = 0; // initialize sequence
b = new Button("Prev");
b.addActionListener(this);
add(b);
b = new Button("Next");
b.addActionListener(this);
add(b);
add(label);
// exported method
public void actionPerformed(ActionEvent ev) {
String label = ev.getActionCommand();
if (label.equals("Prev")) {
if (sequence >0) {
--sequence;
else {
if (sequence < 15) {
++sequence;
this.setEnabled(false); // disable the controls
view.redraw(sequence);
this.setEnabled(true); // enable the controls
}Please help --- really need to sort this out...
THANKSCan any one help me with this --
basically need to draw a triangle with BC as the Base and the HYPOTENUSE of a right angle triangle right angled at A...
[ code]
A
B/-----------------------------/C
So angle A should be 90 degrees
and the user should be able to Drag sides B and C anywhere on screen
PLEASE HELP -
PYTHAGORAS THEOREM ) HELP NEEDED
Hi everyone - I am developing various proofs of the pythagora's theorem
and the following code draws a triangle on screen and the proof follows -
but i need to know how to drag the triangle such tht 1 angle is always set to 90 degrees.
i.e. i need to resize the triangle by dragging its vertex points by which the1 angle remains at 90 no matter what the size.
The proof has got some graphics code hardcoded in it - i.e. LINES AND POLYGONS have been hardcoded
i need to reconfigure that such that everytime the user increases the size of the triagnle and clicks on next it draws the lines and polygons in the correct area and place
PLEASE HELP
the code is as follows
MAIN CLASS
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.*;
import java.awt.event.*;
import java.text.*;
import javax.swing.*;
public class TestProof {
TestControl control; // the controls for the visual proof
TestView view; // the drawing area to display proof
// called upon class creation
public TestProof() {
view = new TestView();
view.setBackground(Color.WHITE);
control = new TestControl(view);
Frame f = new Frame("Pythagoras");
f.add(view,"Center");
f.add(control,"South");
f.setSize(600,600);
f.setBackground(Color.lightGray);
f.addMouseMotionListener(
new MouseMotionListener() { //anonymous inner class
//handle mouse drag event
public void mouseMoved(MouseEvent e) {
System.out.println("Mouse " + e.getX() +"," + e.getY());
public void mouseDragged(MouseEvent e) {
System.out.println("Draggg: x=" + e.getX() + "; y=" + e.getY());
JMenu File = new JMenu("File");
JMenuItem Exit = new JMenuItem("Exit");
Exit.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
ExitActionPerformed(evt);
JMenuBar menuBar = new JMenuBar();
menuBar.add(File);
File.add(Exit);
f.add(menuBar,"North");
f.show();
private JMenuBar getMenuBar() {
JMenu File = new JMenu("File");
JMenuItem Exit = new JMenuItem("Exit");
Exit.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
ExitActionPerformed(evt);
JMenuBar menuBar = new JMenuBar();
menuBar.add(File);
File.add(Exit);
return menuBar;
private void ExitActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
System.exit(0);
// for standalone use
public static void main(String args[]) {
TestProof TP = new TestProof();
}Test VIEW
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.geom.*;
import java.text.*;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class TestView extends Canvas {
int TRANSLUCENT = 1;
int sequence; // sequencer that determines what should be drawn
// notes matter
int noteX = 100; // note coordinates
int noteY = 60;
int fontSize = 11; // font size
int lineSpacing // space between two consecutive lines
= fontSize + 2;
Font noteFaceFont; // font used to display notes
// objects matter
Polygon tri; // right-angled triangle with sides A, B, and C
Polygon tri1;
Polygon sqrA; // square with side of length A
Polygon sqrB; // square with side of length B
Polygon sqrC; // square with side of length C
Polygon parA; // parallelogram of base A and height A
Polygon parB; // parallelogram of base B and height B
Polygon poly1;
Polygon poly2;
Polygon poly3;
Polygon poly4;
Polygon poly5;
Polygon poly6;
int X0 = 350; // coordinates of triangle
int Y0 = 350;
int A = 90;//60; // triangle size
int B = 120;//80;
int C = 150;//100;
//CORDS of 2nd triangle
int X1 = 350;
int Y1 = 500;
// notes: three lines per note
String notes[] = {
// note 0
// note 1
// note 2
// note 3
// note 4
// note 5
// note 6
// note 7
// note 8
// note 9
// note 10
// note 11
// note 12
// note 13
// note 14
// constructor
public TestView() {
addMouseMotionListener(
new MouseMotionListener() { //anonymous inner class
//handle mouse drag event
public void mouseMoved(MouseEvent e) {
System.out.println("Mouse " + e.getX() +"," + e.getY());
public void mouseDragged(MouseEvent e) {
System.out.println("Draggg: x=" + e.getX() + "; y=" + e.getY());
// set font
noteFaceFont = new Font("TimesRoman", Font.PLAIN, fontSize);
// (coordinates specified w.r.t. to P0, unless otherwise specified)
// create the triangle
tri = new Polygon();
tri.addPoint(0, 0); // add P0 coordinate
tri.addPoint(A*A/C, -A*B/C); // add A3 coordinate
tri.addPoint(C, 0); // add C1 coordinate
tri.translate(X0, Y0); // place triangle
tri1 = new Polygon();
tri1.addPoint(0,0); // add P0 coordinate
tri1.addPoint(A*A/C +38, +A*B/C); // add A3 coordinate
tri1.addPoint(C, 0); // add C1 coordinate
tri1.translate(X1, Y1);
// create square of side A
sqrA = new Polygon();
sqrA.addPoint(0, 0); // add P0 coordinate
sqrA.addPoint(-A*B/C, -A*A/C); // add A1 coordinate
sqrA.addPoint(-A*(B-A)/C, -A*(A+B)/C); // add A2 coordinate
sqrA.addPoint(A*A/C, -A*B/C); // add A3 coordinate
sqrA.translate(X0, Y0); // place square
// create square of side B
// warning: the coordinate of this object are specified relative to C1
sqrB = new Polygon();
sqrB.addPoint(0, 0); // add C1 coordinate
sqrB.addPoint(B*A/C, -B*B/C); // add B1 coordinate
sqrB.addPoint(B*(A-B)/C, -B*(A+B)/C); // add B2 coordinate
sqrB.addPoint(-B*B/C, -B*A/C); // add A3 coordinate
sqrB.translate(X0 + C, Y0); // place square
// create square of side C
sqrC = new Polygon();
sqrC.addPoint(0, 0); // add P0 coordinate
sqrC.addPoint(C, 0); // add C1 coordinate
sqrC.addPoint(C, C); // add C2 coordinate
sqrC.addPoint(0, C); // add C3 coordinate
sqrC.translate(X0, Y0); // place square
poly1 = new Polygon();
poly1.addPoint(405,279);
poly1.addPoint(413,350);
poly1.addPoint(432,500);
poly1.addPoint(442,571);
poly1.addPoint(500,500);
poly1.addPoint(500,350);
poly2 = new Polygon();
poly2.addPoint(279,297);
poly2.addPoint(404,280);
poly2.addPoint(571,254);
poly2.addPoint(500,350);
poly2.addPoint(350,350);
//Polygon 3
poly3 = new Polygon();
poly3.addPoint(404,280);
poly3.addPoint(350,350);
poly3.addPoint(414,350);
poly4 = new Polygon();
poly4.addPoint(350,350);
poly4.addPoint(350,500);
poly4.addPoint(442,572);
poly4.addPoint(433,500);
poly4.addPoint(414,350);
poly5 = new Polygon();
poly5.addPoint(476,183);
poly5.addPoint(332,225);
poly5.addPoint(278,295);
poly5.addPoint(404,279);
poly5.addPoint(571,254);
poly6= new Polygon();
poly6.addPoint(405,278);
poly6.addPoint(332,224);
poly6.addPoint(476,182);
// create parallelogram of height A
parA = new Polygon();
parA.addPoint(0, 0); // add P0 coordinate
parA.addPoint(0, C); // add C3 coordinate
parA.addPoint(A*A/C, C - A*B/C); // add Q0 coordinate
parA.addPoint(A*A/C, -A*B/C); // add A3 coordinate
parA.translate(X0,Y0); // place parallelogram
// create parallelogram of height B
// warning: the coordinate of this object are specified from C1
parB = new Polygon();
parB.addPoint(0, 0); // add C1 coordinate
parB.addPoint(-B*B/C, -B*A/C); // add A3 coordinate
parB.addPoint(A*A/C - C, C - A*B/C); // add Q0 coordinate
parB.addPoint(0, C); // add C2 coordinate
parB.translate(X0 + C, Y0);
// place parallelogram
// depending on the sequence number we draw certain objects
public void paint(Graphics gfx) {
super.paint(gfx);
Graphics2D g = (Graphics2D) gfx;
g.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
// text first, then objects (and animation)
// we always output some notes
g.drawString(notes[3*sequence], noteX, noteY);
g.drawString(notes[3*sequence + 1], noteX, noteY + lineSpacing);
g.drawString(notes[3*sequence + 2], noteX, noteY + 2*lineSpacing);
// the object are drawn in an order so that they are properly overlapped
if(sequence == 13) {
g.setColor(Color.green);
g.fillPolygon(poly1);
g.fillPolygon(poly2);
g.fillPolygon(poly3);
g.fillPolygon(poly4);
g.fillPolygon(poly5);
g.setColor(Color.RED);
g.setColor(Color.GREEN);
g.drawLine(413,351,433,499);
g.setColor(Color.white);
g.fillPolygon(tri);
g.fillPolygon(tri1);
g.fillPolygon(poly6);
if(sequence == 12 ) {
g.setColor(Color.green);
g.fillPolygon(poly1);
g.fillPolygon(poly2);
g.fillPolygon(poly3);
g.fillPolygon(poly4);
g.fillPolygon(poly5);
g.setColor(Color.BLACK);
if(sequence == 11){
g.setColor(Color.green);
g.fillPolygon(poly1);
g.fillPolygon(poly3);
g.fillPolygon(poly4);
g.setColor(Color.BLACK);
if(sequence == 8 ){
g.setColor(Color.green);
g.fillPolygon(poly5);
g.setColor(Color.MAGENTA);
g.drawString("E",578,254);
g.drawString("D",268,302);
g.setColor(Color.black);
g.drawArc(250,150,350,250,320,65);
else if (sequence == 9 ){
g.setColor(Color.green);
g.fillPolygon(poly2);
g.setColor(Color.MAGENTA);
g.drawString("E",578,254);
g.drawString("D",268,302);
g.setColor(Color.black);
g.drawArc(250,150,350,250,320,65);
if( sequence == 10){
g.setColor(Color.green);
g.fillPolygon(poly2);
g.fillPolygon(poly5);
g.setColor(Color.black);
g.setColor(Color.MAGENTA);
g.drawString("E",578,254);
g.drawString("D",268,302);
g.setColor(Color.black);
g.drawArc(250,150,350,250,320,65);
if(sequence == 7){
g.setColor(Color.green);
g.fillPolygon(poly2);
g.setColor(Color.MAGENTA);
g.drawString("E",578,254);
g.drawString("D",268,302);
g.setColor(Color.black);
if(sequence == 6){
g.setColor(Color.yellow);
g.fillPolygon(poly2);
g.setColor(Color.green);
g.fillPolygon(poly3);
g.setColor(Color.blue);
g.fillPolygon(poly4);
g.setColor(Color.black);
g.drawArc(250,175,350,275,300,65);
//g.drawArc(250,150,350,250,320,65);
g.drawLine( 606,309,599,299);
g.drawLine(592,313, 599,299);
g.drawString("+90 degrees",605,378);
if (sequence == 5 ) {
g.setColor(Color.yellow);
g.fillPolygon(poly2);
g.setColor(Color.black);
if (sequence == 4) {
g.setColor(Color.YELLOW);
g.fillPolygon(poly1);
g.setColor(Color.black);
g.drawArc(319,310,250,195,89,-35);
g.drawLine(499,319, 492,312);
g.drawLine(499,319, 492,325);
g.drawArc(200,180, 233,238,-120,-60);
g.drawLine(200,298, 208,309);
g.drawLine(200,298, 194,313);
g.drawString("-90 degrees",227,347);
if (sequence >= 3) {
g.drawLine(404,279,442,572);
// draw the squares
if (sequence >= 2) {
g.drawLine(278,296,572,254);
// draw the squares
if (sequence >= 1) {
g.drawLine(333,224,476,182);
g.drawPolygon(tri1);
// always draw the triangle
g.drawPolygon(tri);
g.drawPolygon(sqrA);
g.drawPolygon(sqrB);
g.drawPolygon(sqrC);
g.setColor(Color.MAGENTA);
g.drawString("C", X0 + C/2 - fontSize/2, Y0 + lineSpacing);
g.drawString("A",
X0 + A*A/(2*C) - fontSize*A/B/2,
Y0 - A*B/(2*C) - lineSpacing*A/B);
g.drawString("B",
X0 + C - B*B/(2*C) - fontSize*A/B/2,// the last "-" isn't log.
Y0 - B*A/(2*C) - lineSpacing*A/B);
public void redraw(int sequence) {
this.sequence = sequence;
repaint();
}TEST CONTROL
* TestControl.java
* Created on 28 February 2005, 11:16
import java.awt.*;
import java.awt.event.*;
import java.text.*;
import javax.swing.JFrame;
* @author Kripa Bhojwani
public class TestControl extends Panel implements ActionListener {
TestView view;
int sequence; // event sequence
// constructor
public TestControl(TestView view) {
Button b = null;
Label label = new Label("A^2 ");
this.view = view; // initialize drawble area
sequence = 0; // initialize sequence
b = new Button("Prev");
b.addActionListener(this);
add(b);
b = new Button("Next");
b.addActionListener(this);
add(b);
add(label);
// exported method
public void actionPerformed(ActionEvent ev) {
String label = ev.getActionCommand();
if (label.equals("Prev")) {
if (sequence >0) {
--sequence;
else {
if (sequence < 15) {
++sequence;
this.setEnabled(false); // disable the controls
view.redraw(sequence);
this.setEnabled(true); // enable the controls
}Please help --- really need to sort this out...
THANKSCross post http://forum.java.sun.com/thread.jspa?threadID=603432&messageID=3251958#3251958
-
NEED HELP IN LABELLING A TRIANGLE _ VERTICES
PLEASE HELP ______
import java.awt.*;
import java.awt.event.*;
import java.awt.geom.*;
import java.text.NumberFormat;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.table.DefaultTableCellRenderer;
import java.lang.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;
import java.awt.FileDialog;
import java.io.*;
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;
import javax.swing.JFrame;
public class Geometry {
CardLayout cards;
JPanel panel;
public Geometry() {
cards = new CardLayout();
panel = new JPanel(cards);
addCards();
JFrame f = new JFrame("Geometry");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setJMenuBar(getMenuBar());
f.getContentPane().add(panel);
f.setSize(500,500);
f.setLocation(0,0);
f.setVisible(true);
f.addMouseMotionListener(
new MouseMotionListener() { //anonymous inner class
//handle mouse drag event
public void mouseMoved(MouseEvent e) {
System.out.println("Mouse " + e.getX() +"," + e.getY());
public void mouseDragged(MouseEvent e) {
System.out.println("Draggg: x=" + e.getX() + "; y=" + e.getY());
// public void mouseMoved(MouseEvent me) {
// System.out.println("Moving: x=" + me.getX() + "; y=" + me.getY());
// panel.addMouseMotionListener(
// new MouseMotionListener() { //anonymous inner class
// //handle mouse drag event
// public void mouseDragged(MouseEvent me) {
// setTitle("Dragging: x=" + me.getX() + "; y=" + me.getY());
// public void mouseMoved(MouseEvent me) {
// setTitle("Moving: x=" + me.getX() + "; y=" + me.getY());
private void addCards() {
// card one
TriangleModel tri = new TriangleModel(175,100,175,250,325,250);
TriangleView view = new TriangleView(tri);
JPanel panelOne = new JPanel(new BorderLayout());
panelOne.add(view.getUIPanel(), "North");
panelOne.add(view);
panelOne.add(view.getTablePanel(), "South");
panelOne.setName("Pythagoras's Theorem");
panel.add("Pythagoras's Theorem", panelOne);
view.addMouseMotionListener(
new MouseMotionListener() { //anonymous inner class
//handle mouse drag event
public void mouseMoved(MouseEvent e) {
System.out.println("Mouse at " + e.getX() +"," + e.getY());
public void mouseDragged(MouseEvent e) {
System.out.println("Dragging: x=" + e.getX() + "; y=" + e.getY());
// card two
TestModel trin = new TestModel(175,100,175,250,325,250);
TestView viewn = new TestView(trin);
JPanel panelTwo = new JPanel(new BorderLayout());
panelTwo.add(viewn.getUIPanel(), "North");
// panelTwo.setBackground(Color.blue);
panelTwo.setName("Similar Triangles");
panelTwo.add(viewn);
panelTwo.add(viewn.getTablePanel(), "South");
viewn.addMouseMotionListener(
new MouseMotionListener() { //anonymous inner class
//handle mouse drag event
public void mouseMoved(MouseEvent e) {
System.out.println("Mouse at " + e.getX() +"," + e.getY());
public void mouseDragged(MouseEvent e) {
System.out.println("Dragging: x=" + e.getX() + "; y=" + e.getY());
panel.add("Similar Triangles", panelTwo);
JPanel panelThree = new JPanel();
panelThree.setBackground(Color.white);
panelThree.setName("Circle Theorem1");
panel.add("Circle Theorem1", panelThree);
private JMenuBar getMenuBar() {
JMenu File = new JMenu("File");
JSeparator separator1 = new JSeparator();
JMenuItem Open = new JMenuItem("Open");
// Open.addActionListener(new java.awt.event.ActionListener() {
// public void actionPerformed(java.awt.event.ActionEvent evt) {
// openActionPerformed(evt);
JMenuItem Save = new JMenuItem("Save");
JMenuItem Print = new JMenuItem("Print");
JMenuItem Exit = new JMenuItem("Exit");
Exit.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
ExitActionPerformed(evt);
JMenu theorem = new JMenu("Theorem");
ActionListener l = new ActionListener() {
public void actionPerformed(ActionEvent e) {
JMenuItem item = (JMenuItem)e.getSource();
String name = item.getActionCommand();
cards.show(panel, name);
Component[] c = panel.getComponents();
for(int j = 0; j < panel.getComponentCount(); j++) {
String name = c[j].getName();
JMenuItem item = new JMenuItem(name);
item.setActionCommand(name);
item.addActionListener(l);
theorem.add(item);
JMenuBar menuBar = new JMenuBar();
JMenuBar menuBar1 = new JMenuBar();
menuBar.add(File);
File.add(Open);
File.add(separator1);
File.add(Save);
File.add(Print);
File.add(Exit);
menuBar.add(theorem);
return menuBar;
// private void openActionPerformed(java.awt.event.ActionEvent evt) {
// FileDialog fileDialog = new FileDialog(this, "Open...", FileDialog.LOAD);
// fileDialog.show();
// if (fileDialog.getFile() == null)
// return;
// fileName = fileDialog.getDirectory() + File.separator + fileDialog.getFile();
// FileInputStream fis = null;
// String str = null;
// try {
// fis = new FileInputStream(fileName);
// int size = fis.available();
// byte[] bytes = new byte [size];
// fis.read(bytes);
// str = new String(bytes);
// } catch (IOException e) {
// } finally {
// try {
// fis.close();
// } catch (IOException e2) {
// if (str != null)
// textBox.setText(str);
private void ExitActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
System.exit(0);
public static void main(String[] args) {
new Geometry();
import java.awt.*;
import java.awt.event.*;
import java.awt.geom.*;
import java.text.NumberFormat;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.table.DefaultTableCellRenderer;
public class Triangle
public Triangle()
TriangleModel tri = new TriangleModel(175,100,175,250,325,250);
TriangleView view = new TriangleView(tri);
JFrame f = new JFrame();
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.getContentPane().add(view.getUIPanel(), "North");
f.getContentPane().add(view);
f.getContentPane().add(view.getTablePanel(), "South");
f.setSize(500,500);
f.setLocation(200,200);
f.setVisible(true);
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.event.MouseEvent;
import javax.swing.JTable;
import javax.swing.event.MouseInputAdapter;
* TriangleControl.java
* Created on 06 February 2005, 01:19
* @author Rahindra Naidoo
public class TriangleControl extends MouseInputAdapter
TriangleView view;
TriangleModel model;
Point start;
boolean dragging, altering;
Rectangle lineLens; // used for line selection
public TriangleControl(TriangleView tv)
view = tv;
model = view.getModel();
dragging = altering = false;
lineLens = new Rectangle(0, 0, 6, 6);
public void mousePressed(MouseEvent e)
Point p = e.getPoint();
lineLens.setLocation(p.x - 3, p.y - 3);
// are we over a line
if(model.isLineSelected(lineLens))
start = p;
altering = true;
// or are we within the triangle
else if(model.contains(p))
start = p;
dragging = true;
public void mouseReleased(MouseEvent e)
altering = false;
dragging = false;
view.getCentroidLabel().setText("centroid location: " +
model.findCentroid());
view.repaint(); // for the construction lines
public void mouseDragged(MouseEvent e)
Point p = e.getPoint();
if(altering)
int x = p.x - start.x;
int y = p.y - start.y;
model.moveSide(x, y, p);
updateTable();
view.repaint();
start = p;
else if(dragging)
int x = p.x - start.x;
int y = p.y - start.y;
model.translate(x, y);
view.repaint();
start = p;
private void updateTable()
String[] lengths = model.getLengths();
String[] squares = model.getSquares();
String[] angles = model.getAngles();
JTable table = view.getTable();
for(int j = 0; j < angles.length; j++)
table.setValueAt(lengths[j], 1, j + 1);
table.setValueAt(squares[j], 2, j + 1);
table.setValueAt(angles[j], 3, j + 1);
view.getCentroidLabel().setText("centroid location: " +
model.findCentroid());
* TriangleModel.java
* Created on 06 February 2005, 01:18
import java.awt.*;
import java.awt.event.*;
import java.awt.geom.*;
import java.text.NumberFormat;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.table.DefaultTableCellRenderer;
* @author Rahindra Naidoo
public class TriangleModel // (x1, y1)
{ // |\
static final int SIDES = 3; // | \
private int cx, cy; // | \
Polygon triangle; // |_ _\ (x3, y3)
int selectedIndex; // (x2, y2)
NumberFormat nf;
Line2D[] medians;
Point2D centroid;
public TriangleModel(int x1, int y1, int x2, int y2, int x3, int y3)
int[] x = new int[] { x1, x2, x3 };
int[] y = new int[] { y1, y2, y3 };
triangle = new Polygon(x, y, SIDES);
nf = NumberFormat.getNumberInstance();
nf.setMaximumFractionDigits(1);
public boolean contains(Point p)
// Polygon.contains doesn't work well enough
return (new Area(triangle)).contains(p);
public boolean isLineSelected(Rectangle r)
Line2D line = new Line2D.Double();
for(int j = 0; j < SIDES; j++)
int[] x = triangle.xpoints;
int[] y = triangle.ypoints;
int x1 = x[j];
int y1 = y[j];
int x2 = x[(j + 1) % SIDES];
int y2 = y[(j + 1) % SIDES];
line.setLine(x1, y1, x2, y2);
if(line.intersects(r))
selectedIndex = j;
return true;
selectedIndex = -1;
return false;
* Only works for right triangle with right angle at (x2, y2)
public void moveSide(int dx, int dy, Point p)
int[] x = triangle.xpoints;
int[] y = triangle.ypoints;
switch(selectedIndex)
case 0:
x[0] += dx;
x[1] += dx;
break;
case 1:
y[1] += dy;
y[2] += dy;
break;
case 2:
double rise = y[2] - y[0];
double run = x[2] - x[0];
double slope = rise/run;
// rise / run == (y[2] - p.y) / (x[2] - p.x)
x[2] = p.x + (int)((y[2] - p.y) / slope);
// rise / run == (p.y - y[0]) / (p.x - x[0])
y[0] = p.y - (int)((p.x - x[0]) * slope);
public void translate(int dx, int dy)
triangle.translate(dx, dy);
public Polygon getTriangle()
return triangle;
public String findCentroid()
int[] x = triangle.xpoints;
int[] y = triangle.ypoints;
// construct the medians defined as the line from
// any vertex to the midpoint of the opposite line
medians = new Line2D[x.length];
for(int j = 0; j < x.length; j++)
int next = (j + 1) % x.length;
int last = (j + 2) % x.length;
Point2D vertex = new Point2D.Double(x[j], y[j]);
// get midpoint of line opposite vertex
double dx = ((double)x[last] - x[next])/2;
double dy = ((double)y[last] - y[next])/2;
Point2D oppLineCenter = new Point2D.Double(x[next] + dx,
y[next] + dy);
medians[j] = new Line2D.Double(vertex, oppLineCenter);
// centroid is located on any median 2/3 the way from the
// vertex (P1) to the midpoint (P2) on the opposite side
double[] lengths = getSideLengths();
double dx = (medians[0].getX2() - medians[0].getX1())*2/3;
double dy = (medians[0].getY2() - medians[0].getY1())*2/3;
double px = medians[0].getX1() + dx;
double py = medians[0].getY1() + dy;
//System.out.println("px = " + nf.format(px) +
// "\tpy = " + nf.format(py));
centroid = new Point2D.Double(px, py);
return "(" + nf.format(px) + ", " + nf.format(py) + ")";
public String[] getAngles()
double[] lengths = getSideLengths();
String[] vertices = new String[lengths.length];
for(int j = 0; j < lengths.length; j++)
int opp = (j + 1) % lengths.length;
int last = (j + 2) % lengths.length;
double top = lengths[j] * lengths[j] +
lengths[last] * lengths[last] -
lengths[opp] * lengths[opp];
double divisor = 2 * lengths[j] * lengths[last];
double vertex = Math.acos(top / divisor);
vertices[j] = nf.format(Math.toDegrees(vertex));
return vertices;
public String[] getLengths()
double[] lengths = getSideLengths();
String[] lengthStrs = new String[lengths.length];
for(int j = 0; j < lengthStrs.length; j++)
lengthStrs[j] = nf.format(lengths[j]);
return lengthStrs;
public String[] getSquares()
double[] lengths = getSideLengths();
String[] squareStrs = new String[lengths.length];
for(int j = 0; j < squareStrs.length; j++)
squareStrs[j] = nf.format(lengths[j] * lengths[j]);
return squareStrs;
private double[] getSideLengths()
int[] x = triangle.xpoints;
int[] y = triangle.ypoints;
double[] lengths = new double[SIDES];
for(int j = 0; j < SIDES; j++)
int next = (j + 1) % SIDES;
lengths[j] = Point.distance(x[j], y[j], x[next], y[next]);
return lengths;
import java.awt.*;
import java.awt.event.*;
import java.awt.geom.*;
import java.text.NumberFormat;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.table.DefaultTableCellRenderer;
* TriangleView.java
* Created on 06 February 2005, 01:21
public class TriangleView extends JPanel
private TriangleModel model;
private Polygon triangle;
private JTable table;
private JLabel centroidLabel;
private boolean showConstruction;
TriangleControl control;
public TriangleView(TriangleModel model)
this.model = model;
triangle = model.getTriangle();
showConstruction = false;
control = new TriangleControl(this);
addMouseListener(control);
addMouseMotionListener(control);
public void paintComponent(Graphics g)
super.paintComponent(g);
Graphics2D g2 = (Graphics2D)g;
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
g2.draw(triangle);
if(model.medians == null)
centroidLabel.setText("centroid location: " + model.findCentroid());
// draw medians and centroid point
if(showConstruction && !control.dragging)
g2.setPaint(Color.red);
for(int j = 0; j < 3; j++)
g2.draw(model.medians[j]);
g2.setPaint(Color.blue);
g2.fill(new Ellipse2D.Double(model.centroid.getX() - 2,
model.centroid.getY() - 2, 4, 4));
public TriangleModel getModel()
return model;
public JTable getTable()
return table;
public JLabel getCentroidLabel()
return centroidLabel;
public JPanel getUIPanel()
JCheckBox showCon = new JCheckBox("show construction");
showCon.addActionListener(new ActionListener()
public void actionPerformed(ActionEvent e)
boolean state = ((JCheckBox)e.getSource()).isSelected();
showConstruction = state;
repaint();
JPanel panel = new JPanel();
panel.add(showCon);
return panel;
public JPanel getTablePanel()
String[] headers = new String[] { "", "", "", "" };
// row and column data labels
String[] rowHeaders = {
"sides", "lengths", "squares", "angles", "degrees"
String[] sidesRow = { "vertical", "horizontal", "hypotenuse" };
String[] anglesRow = { "hyp to ver", "ver to hor", "hor to hyp" };
// collect data from model
String[] angles = model.getAngles();
String[] lengths = model.getLengths();
String[] squares = model.getSquares();
String[][] allData = { sidesRow, lengths, squares, anglesRow, angles };
int rows = 5;
int cols = 4;
Object[][] data = new Object[rows][cols];
for(int row = 0; row < rows; row++)
data[row][0] = rowHeaders[row];
for(int col = 1; col < cols; col++)
data[row][col] = allData[row][col - 1];
table = new JTable(data, headers)
public boolean isCellEditable(int row, int col)
return false;
DefaultTableCellRenderer renderer =
(DefaultTableCellRenderer)table.getDefaultRenderer(String.class);
renderer.setHorizontalAlignment(JLabel.CENTER);
centroidLabel = new JLabel("centroid location: ", JLabel.CENTER);
Dimension d = centroidLabel.getPreferredSize();
d.height = table.getRowHeight();
centroidLabel.setPreferredSize(d);
JPanel panel = new JPanel(new BorderLayout());
panel.setBorder(BorderFactory.createTitledBorder("triangle data"));
panel.add(table);
panel.add(centroidLabel, "South");
return panel;
}PLEASE HELP ME TO LABEL THE TRIANGLE AND CHANGE THE VALUES OF THE JTABLE - to SHOW ASquare b Square and C square as well as a label on the bottom of the screen to show A^2 + B^2 = C^2 ...
ThANKSpublic void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2 = (Graphics2D)g;
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
g2.drawPolygon(triangle);
// label the triangle
String[] lengths = model.getLengths();
String[] squares = model.getSquares();
String[] angles = model.getAngles();
int[] x = triangle.xpoints;
int[] y = triangle.ypoints;
for(int j = 0; j < x.length; j++) {
Point2D vertex = new Point2D.Double(x[j], y[j]);
int next = (j + 0) % x.length;
int last = (j + 1) % x.length;
double dx = ((double)x[last] - x[next])/2;
double dy = ((double)y[last] - y[next])/2;
Point2D center = new Point2D.Double(x[next] + dx, y[next] + dy);
g2.drawString(angles[j],(int)vertex.getX(),(int)vertex.getY());
g2.drawString(lengths[j],(int)center.getX(),(int)center.getY());
g2.drawString(squares[0],100, getHeight());
g2.drawString(" + "+squares[1],150, getHeight());
g2.drawString(" = "+squares[2],200, getHeight());
if(model.medians == null)
centroidLabel.setText("centroid location: " + model.findCentroid());
// draw medians and centroid point
if(showConstruction && !control.dragging) {
g2.setPaint(Color.red);
for(int j = 0; j < 3; j++)
g2.draw(model.medians[j]);
g2.setPaint(Color.blue);
g2.fill(new Ellipse2D.Double(model.centroid.getX() - 2,
model.centroid.getY() - 2, 4, 4));
} -
Calculating and displaying the Length of the side of a triangle
Hi everyone. I am currently working on Dragging and Stretching a triangle on screen. Ive got it working to a certain extent but the only problem is that whenever I go to the point from which i have to drag my triangle i.e. the Left hand Corner of the BAse at exactly 300,300 it redraws a new triangle below the existing one and then when i stretch it from the top and the right it leaves a trail of triangles everytime. But when i resize my window it clears the trail only to start agian when I drag or stretch it...
All my code for wahtever I have done is displayed below. I would appreciate all the help that any one can offer.
Secondly , as I stretch my triangle I would like to calculate My Length of the hypotenuse and the other 2 sides as they change and display it in System.out.println for now...
PLEASE HELP
the code is
This is my Main Form --- Interactive Geometry.java
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;
import javax.swing.JFrame;
* InteractiveGeometry.java
* Created on 30 November 2004, 20:29
* @author Kripa Bhojwani
public class InteractiveGeometry extends javax.swing.JFrame {
public EastPanel eastpanel;
public Container container;
public GeomPanel gp;
public boolean pressed = false;
public boolean pressT = false;
public boolean pressR = false;
/** Creates new form InteractiveGeometry */
public InteractiveGeometry() {
initComponents();
eastpanel = new EastPanel();
container = new Container();
Model model = new Model(300,150,450,300,300,300);
gp = new GeomPanel(model);
container = getContentPane();
container.add(eastpanel,BorderLayout.EAST);
container.add(gp,BorderLayout.CENTER);
setSize(1400,9950);
gp.addMouseMotionListener(
new MouseMotionListener() { //anonymous inner class
//handle mouse drag event
public void mouseDragged(MouseEvent me) {
setTitle("Dragging: x=" + me.getX() + "; y=" + me.getY());
public void mouseMoved(MouseEvent me) {
setTitle("Moving: x=" + me.getX() + "; y=" + me.getY());
/** This method is called from within the constructor to
* initialize the form.
* WARNING: Do NOT modify this code. The content of this method is
* always regenerated by the Form Editor.
private void initComponents() {
jMenuBar2 = new javax.swing.JMenuBar();
jMenu2 = new javax.swing.JMenu();
jMenuItem1 = new javax.swing.JMenuItem();
jMenu1 = new javax.swing.JMenu();
jMenuItem2 = new javax.swing.JMenuItem();
addMouseMotionListener(new java.awt.event.MouseMotionAdapter() {
public void mouseDragged(java.awt.event.MouseEvent evt) {
formMouseDragged(evt);
public void mouseMoved(java.awt.event.MouseEvent evt) {
formMouseMoved(evt);
addWindowListener(new java.awt.event.WindowAdapter() {
public void windowClosing(java.awt.event.WindowEvent evt) {
exitForm(evt);
jMenuBar2.setBackground(new java.awt.Color(0, 102, 204));
jMenu2.setBackground(new java.awt.Color(222, 222, 238));
jMenu2.setText("File");
jMenu2.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jMenu2ActionPerformed(evt);
jMenuItem1.setBackground(new java.awt.Color(204, 255, 255));
jMenuItem1.setText("Exit");
jMenuItem1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jMenuItem1ActionPerformed(evt);
jMenu2.add(jMenuItem1);
jMenuBar2.add(jMenu2);
jMenu1.setBackground(new java.awt.Color(199, 215, 255));
jMenu1.setText("Theorem ");
jMenuItem2.setText("Pythagoras Theorem");
jMenuItem2.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jMenuItem2ActionPerformed(evt);
jMenu1.add(jMenuItem2);
jMenuBar2.add(jMenu1);
setJMenuBar(jMenuBar2);
pack();
private void jMenuItem2ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
private void formMouseDragged(java.awt.event.MouseEvent evt) {
// TODO add your handling code here:
private void formMouseMoved(java.awt.event.MouseEvent evt) {
// TODO add your handling code here:
public void mouseDragged(MouseEvent me) {
setTitle("Dragging: x=" + me.getX() + "; y=" + me.getY());
private void jMenu2ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
private void jMenuItem1ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
System.exit(0);
/** Exit the Application */
private void exitForm(java.awt.event.WindowEvent evt) {
System.exit(0);
* @param args the command line arguments
public static void main(String args[]) {
InteractiveGeometry ig = new InteractiveGeometry();
ig.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
ig.show();
// new InteractiveGeometry().show();
// Variables declaration - do not modify
private javax.swing.JMenu jMenu1;
private javax.swing.JMenu jMenu2;
private javax.swing.JMenuBar jMenuBar2;
private javax.swing.JMenuItem jMenuItem1;
private javax.swing.JMenuItem jMenuItem2;
// End of variables declaration
This is my Panel -- GeomPanel.java which draws everything -- /*
* GeomPanel.java
* Created on 30 November 2004, 20:29
import java.awt.*;
import java.util.*;
import javax.swing.*;
import java.awt.Graphics.*;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.awt.geom.Line2D;
import java.awt.geom.Point2D;
import java.awt.event.*;
import java.awt.Graphics2D;
import java.awt.geom.Ellipse2D;
import javax.swing.event.TableModelListener;
import javax.swing.JScrollPane;
import javax.swing.event.*;
import java.awt.Dimension;
import java.awt.Container.*;
* @author Kripa Bhojwani
public class GeomPanel extends javax.swing.JPanel implements Observer, MouseMotionListener, MouseListener {
private Model model;
private boolean pressed = false;
private boolean pressT = false;
private boolean pressR = false;
/** Creates new form GeomPanel */
public GeomPanel(Model model) {
this.model = model;
model.addObserver(this);
addMouseListener(this);
addMouseMotionListener(this);
initComponents();
setBackground(Color.getHSBColor(6,600,660));
public void paintComponent(Graphics gfx) {
Graphics2D g = (Graphics2D) gfx;
Point tc = model.getTop();
Point lc = model.getLeft();
Point rc = model.getRight();
Point2D.Double p1 = new Point2D.Double(tc.getX(),tc.getY());
Point2D.Double p2 = new Point2D.Double(lc.getX(),lc.getY());
Point2D.Double p3 = new Point2D.Double(rc.getX(),rc.getY());
Line2D.Double line = new Line2D.Double(p1, p2);
Line2D.Double line1 = new Line2D.Double(p2, p3);
Line2D.Double line2 = new Line2D.Double(p1, p3);
g.setColor(Color.BLACK);
g.draw(line);
g.draw(line2);
g.draw(line1);
/** This method is called from within the constructor to
* initialize the form.
* WARNING: Do NOT modify this code. The content of this method is
* always regenerated by the Form Editor.
private void initComponents() {
setLayout(new java.awt.BorderLayout());
addMouseMotionListener(new java.awt.event.MouseMotionAdapter() {
public void mouseDragged(java.awt.event.MouseEvent evt) {
formMouseDragged(evt);
private void formMouseDragged(java.awt.event.MouseEvent evt) {
// TODO add your handling code here:
public void mouseClicked(MouseEvent e) {
public void mouseDragged(MouseEvent e) {
System.out.println("Dragged at "+ e.getX()+ "," + e.getY());
if(pressed == true){
model.setLeft(e.getX() , e.getY());
else if(pressT == true){
model.setTop(e.getX() , e.getY());
else if (pressR == true){
model.setRight(e.getX(), e.getY());
else{
pressed = false;
pressT= false;
pressR=false;
repaint();
public void mouseEntered(MouseEvent e) {
public void mouseExited(MouseEvent e) {
public void mouseMoved(MouseEvent e) {
System.out.println("Mouse at " + e.getX() +"," + e.getY());
public void mousePressed(MouseEvent e) {
if (model.getLeft().getX()== e.getX() && model.getLeft().getY()== e.getY()){
pressed = true;
else if (model.getTop().getX()==e.getX() && model.getTop().getY()==e.getY()){
pressT = true;
else if(model.getRight().getX() == e.getX() && model.getRight().getY()==e.getY()){
pressR = true;
// else if(model.getCircle().getX() == e.getX() && model.getCircle().getY() == e.getY()){
// inoval = true;
else {
pressed =false;
pressT = false;
pressR = false;
} repaint();
public void mouseReleased(MouseEvent e) {
if(pressed == true){
model.setLeft(e.getX(),e.getY());
else if (pressT ==true ){
model.setTop(e.getX(), e.getY());
else if(pressR ==true){
model.setRight(e.getX(),e.getY());
else {
pressed = false;
pressT = false;
pressR = false;
repaint();
public void update(Observable o, Object arg) {
repaint();
// Variables declaration - do not modify
// End of variables declaration
This is my Model class called Model.java which Holds all teh data for my triangle
import java.awt.Point;
import java.util.Observable;
* Model.java
* Created on 05 December 2004, 14:11
* @author Kripa Bhojwani
public class Model extends Observable{
private int x1,x2,x3, y1,y2,y3;
private int _transx;
private int _transy;
private int _c;
private int _d;
/** Creates a new instance of Model */
public Model(int x1, int y1, int x2, int y2, int x3, int y3) {
this.x1 = x1;
this.y1 = y1;
this.x2 = x2;
this.y2 = y2;
this.x3 = x3;
this.y3 = y3;
setChanged();
notifyObservers();
public void setTop(int x1, int y1){
//this.x1 =x1;
this.y1= y1;
setChanged();
notifyObservers();
public void setRight(int x2, int y2){
this.x2 = x2;
// this.y2 =y2;
setChanged();
notifyObservers();
public void setLeft(int x3, int y3){
_transx = x3 - this.x3;
_transy = y3 - this.y3;
this.x3 += _transx;
this.y3 += _transy;
this.y2 += _transy;
this.x2 += _transx;
this.x1 += _transx;
this.y1 += _transy;
setChanged();
notifyObservers();
public Point getTop(){
Point p = new Point(x1,y1);
return p;
public Point getRight(){
Point p1 = new Point(x2,y2);
return p1;
public Point getLeft(){
Point p3 = new Point(x3,y3);
return p3;
public void update() {
setChanged();
notifyObservers();
This is my TableModel which is the JTable to display all the Cordinates and Lengths and other Measurements like angles etc./*
* TableModel.java
* Created on 03 December 2004, 15:08
import javax.swing.JTable;
import javax.swing.JScrollPane;
import javax.swing.JPanel;
import javax.swing.JFrame;
import java.awt.*;
import java.awt.event.*;
import java.util.Observer;
import javax.swing.event.TableModelEvent;
import javax.swing.table.AbstractTableModel;
* @author Kripa Bhojwani
public class TableModel extends AbstractTableModel implements Observer{
private String[] columnNames = {"Point", "X Coordinate", "Y Coordinate"};
private Object[][] data = {};
private int rowCount;
private int columnCount;
/** Creates a new instance of TableModel */
public TableModel() {
rowCount = 0;
columnCount = 3;
public int getColumnCount() {
return columnCount;
public int getRowCount() {
return rowCount;
public String getColumnName(int col) {
return columnNames[col];
public void setColumnName (String[] name){
columnNames = name;
public void setValueAt(Object obj, int row, int col) {
data[row][col] = obj;
fireTableCellUpdated(row, col);
TableModelEvent tme = new TableModelEvent(this);
fireTableChanged(tme);
public Object getValueAt(int row, int col) {
return data[row][col];
public void update(java.util.Observable o, Object arg) {
This is the Panel on the east side of My Main application form which will display all the measurements and Cordinates ---EastPanel.java
import java.awt.BorderLayout;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.event.TableModelListener;
import java.awt.Dimension;
* EastPanel.java
* Created on 04 December 2004, 23:07
* @author Kripa Bhojwani
public class EastPanel extends javax.swing.JPanel implements TableModelListener{
private TableModel tm;
/** Creates new form EastPanel */
public EastPanel() {
initComponents();
tm = new TableModel();
JTable table1 = new JTable(tm);
table1.setPreferredScrollableViewportSize(new Dimension(250,264));
table1.getModel().addTableModelListener(this);
JScrollPane sp = new JScrollPane(table1);
add(sp,BorderLayout.EAST);
/** This method is called from within the constructor to
* initialize the form.
* WARNING: Do NOT modify this code. The content of this method is
* always regenerated by the Form Editor.
private void initComponents() {
setLayout(new java.awt.BorderLayout());
public void tableChanged(javax.swing.event.TableModelEvent e) {
// Variables declaration - do not modify
// End of variables declaration
}import java.awt.*;
import java.awt.event.*;
import java.awt.geom.*;
import java.text.NumberFormat;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.table.DefaultTableCellRenderer;
public class G
public G()
TriangleModel tri = new
ri = new TriangleModel(175,100,175,250,325,250);
TriangleView view = new TriangleView(tri);
JFrame f = new JFrame();
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.getContentPane().add(view.getUIPanel(),
Panel(), "North");
f.getContentPane().add(view);
f.getContentPane().add(view.getTablePanel(),
Panel(), "South");
f.setSize(500,500);
f.setLocation(200,200);
f.setVisible(true);
public static void main(String[] args)
new G();
class TriangleModel // (x1,
y1)
{ // |\
static final int SIDES = 3; // | \
private int cx, cy; // |
| \
Polygon triangle; // |_
|_ _\ (x3, y3)
int selectedIndex; // (x2,
(x2, y2)
NumberFormat nf;
Line2D[] medians;
Point2D centroid;
public TriangleModel(int x1, int y1, int x2, int
int y2, int x3, int y3)
int[] x = new int[] { x1, x2, x3 };
int[] y = new int[] { y1, y2, y3 };
triangle = new Polygon(x, y, SIDES);
nf = NumberFormat.getNumberInstance();
nf.setMaximumFractionDigits(1);
public boolean contains(Point p)
// Polygon.contains doesn't work well enough
return (new Area(triangle)).contains(p);
public boolean isLineSelected(Rectangle r)
Line2D line = new Line2D.Double();
for(int j = 0; j < SIDES; j++)
int[] x = triangle.xpoints;
int[] y = triangle.ypoints;
int x1 = x[j];
int y1 = y[j];
int x2 = x[(j + 1) % SIDES];
int y2 = y[(j + 1) % SIDES];
line.setLine(x1, y1, x2, y2);
if(line.intersects(r))
selectedIndex = j;
return true;
selectedIndex = -1;
return false;
* Only works for right triangle with right angle
angle at (x2, y2)
public void moveSide(int dx, int dy, Point p)
int[] x = triangle.xpoints;
int[] y = triangle.ypoints;
switch(selectedIndex)
case 0:
x[0] += dx;
x[1] += dx;
break;
case 1:
y[1] += dy;
y[2] += dy;
break;
case 2:
double rise = y[2] - y[0];
double run = x[2] - x[0];
double slope = rise/run;
// rise / run == (y[2] - p.y) / (x[2]
] - p.y) / (x[2] - p.x)
x[2] = p.x + (int)((y[2] - p.y) /
)((y[2] - p.y) / slope);
// rise / run == (p.y - y[0]) / (p.x
y - y[0]) / (p.x - x[0])
y[0] = p.y - (int)((p.x - x[0]) *
)((p.x - x[0]) * slope);
public void translate(int dx, int dy)
triangle.translate(dx, dy);
public Polygon getTriangle()
return triangle;
public String findCentroid()
int[] x = triangle.xpoints;
int[] y = triangle.ypoints;
// construct the medians defined as the line
the line from
// any vertex to the midpoint of the opposite
opposite line
medians = new Line2D[x.length];
for(int j = 0; j < x.length; j++)
int next = (j + 1) % x.length;
int last = (j + 2) % x.length;
Point2D vertex = new Point2D.Double(x[j],
Double(x[j], y[j]);
// get midpoint of line opposite vertex
double dx = ((double)x[last] -
le)x[last] - x[next])/2;
double dy = ((double)y[last] -
le)y[last] - y[next])/2;
Point2D oppLineCenter = new
Center = new Point2D.Double(x[next] + dx,
y[next]
y[next] + dy);
medians[j] = new Line2D.Double(vertex,
uble(vertex, oppLineCenter);
// centroid is located on any median 2/3 the
2/3 the way from the
// vertex (P1) to the midpoint (P2) on the
) on the opposite side
double[] lengths = getSideLengths();
double dx = (medians[0].getX2() -
etX2() - medians[0].getX1())*2/3;
double dy = (medians[0].getY2() -
etY2() - medians[0].getY1())*2/3;
double px = medians[0].getX1() + dx;
double py = medians[0].getY1() + dy;
//System.out.println("px = " + nf.format(px)
rmat(px) +
// "\tpy = " +
py = " + nf.format(py));
centroid = new Point2D.Double(px, py);
return "(" + nf.format(px) + ", " +
", " + nf.format(py) + ")";
public String[] getAngles()
double[] lengths = getSideLengths();
String[] vertices = new
es = new String[lengths.length];
for(int j = 0; j < lengths.length; j++)
int opp = (j + 1) % lengths.length;
int last = (j + 2) % lengths.length;
double top = lengths[j] * lengths[j] +
lengths[last] *
lengths[last] * lengths[last] -
lengths[opp] *
lengths[opp] * lengths[opp];
double divisor = 2 * lengths[j] *
lengths[j] * lengths[last];
double vertex = Math.acos(top /
h.acos(top / divisor);
vertices[j] =
ertices[j] = nf.format(Math.toDegrees(vertex));
return vertices;
public String[] getLengths()
double[] lengths = getSideLengths();
String[] lengthStrs = new
rs = new String[lengths.length];
for(int j = 0; j < lengthStrs.length; j++)
lengthStrs[j] = nf.format(lengths[j]);
return lengthStrs;
public String[] getSquares()
double[] lengths = getSideLengths();
String[] squareStrs = new
rs = new String[lengths.length];
for(int j = 0; j < squareStrs.length; j++)
squareStrs[j] = nf.format(lengths[j] *
lengths[j] * lengths[j]);
return squareStrs;
private double[] getSideLengths()
int[] x = triangle.xpoints;
int[] y = triangle.ypoints;
double[] lengths = new double[SIDES];
for(int j = 0; j < SIDES; j++)
int next = (j + 1) % SIDES;
lengths[j] = Point.distance(x[j], y[j],
(x[j], y[j], x[next], y[next]);
return lengths;
class TriangleView extends JPanel
private TriangleModel model;
private Polygon triangle;
private JTable table;
private JLabel centroidLabel;
private boolean showConstruction;
TriangleControl control;
public TriangleView(TriangleModel model)
this.model = model;
triangle = model.getTriangle();
showConstruction = false;
control = new TriangleControl(this);
addMouseListener(control);
addMouseMotionListener(control);
public void paintComponent(Graphics g)
super.paintComponent(g);
Graphics2D g2 = (Graphics2D)g;
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
g2.draw(triangle);
if(model.medians == null)
centroidLabel.setText("centroid location:
id location: " + model.findCentroid());
// draw medians and centroid point
if(showConstruction && !control.dragging)
g2.setPaint(Color.red);
for(int j = 0; j < 3; j++)
g2.draw(model.medians[j]);
g2.setPaint(Color.blue);
g2.fill(new
g2.fill(new Ellipse2D.Double(model.centroid.getX() -
2,
model.centroid.getY()
model.centroid.getY() - 2, 4, 4));
public TriangleModel getModel()
return model;
public JTable getTable()
return table;
public JLabel getCentroidLabel()
return centroidLabel;
public JPanel getUIPanel()
JCheckBox showCon = new JCheckBox("show
ox("show construction");
showCon.addActionListener(new
ener(new ActionListener()
public void actionPerformed(ActionEvent
(ActionEvent e)
boolean state =
boolean state =
((JCheckBox)e.getSource()).isSelected();
showConstruction = state;
repaint();
JPanel panel = new JPanel();
panel.add(showCon);
return panel;
public JPanel getTablePanel()
String[] headers = new String[] { "", "", "",
// row and column data labels
String[] rowHeaders = {
"sides", "lengths", "squares", "angles",
", "angles", "degrees"
String[] sidesRow = { "vertical",
rtical", "horizontal", "hypotenuse" };
String[] anglesRow = { "hyp to ver", "ver to
"ver to hor", "hor to hyp" };
// collect data from model
String[] angles = model.getAngles();
String[] lengths = model.getLengths();
String[] squares = model.getSquares();
String[][] allData = { sidesRow, lengths,
lengths, squares, anglesRow, angles };
int rows = 5;
int cols = 4;
Object[][] data = new Object[rows][cols];
for(int row = 0; row < rows; row++)
data[row][0] = rowHeaders[row];
for(int col = 1; col < cols; col++)
data[row][col] = allData[row][col -
lData[row][col - 1];
table = new JTable(data, headers)
public boolean isCellEditable(int row,
ble(int row, int col)
return false;
DefaultTableCellRenderer renderer =
(DefaultTableCellRenderer)table.getDefaultRenderer(St
ring.class);
renderer.setHorizontalAlignment(JLabel.CENTER);
centroidLabel = new JLabel("centroid
centroid location: ", JLabel.CENTER);
Dimension d =
sion d = centroidLabel.getPreferredSize();
d.height = table.getRowHeight();
centroidLabel.setPreferredSize(d);
JPanel panel = new JPanel(new
anel(new BorderLayout());
panel.setBorder(BorderFactory.createTitledBorder("tri
angle data"));
panel.add(table);
panel.add(centroidLabel, "South");
return panel;
class TriangleControl extends MouseInputAdapter
TriangleView view;
TriangleModel model;
Point start;
boolean dragging, altering;
Rectangle lineLens; // used for line
line selection
public TriangleControl(TriangleView tv)
view = tv;
model = view.getModel();
dragging = altering = false;
lineLens = new Rectangle(0, 0, 6, 6);
public void mousePressed(MouseEvent e)
Point p = e.getPoint();
lineLens.setLocation(p.x - 3, p.y - 3);
// are we over a line
if(model.isLineSelected(lineLens))
start = p;
altering = true;
// or are we within the triangle
else if(model.contains(p))
start = p;
dragging = true;
public void mouseReleased(MouseEvent e)
altering = false;
dragging = false;
view.getCentroidLabel().setText("centroid
centroid location: " +
model.findCentroid());
view.repaint(); // for the construction
truction lines
public void mouseDragged(MouseEvent e)
Point p = e.getPoint();
if(altering)
int x = p.x - start.x;
int y = p.y - start.y;
model.moveSide(x, y, p);
updateTable();
view.repaint();
start = p;
else if(dragging)
int x = p.x - start.x;
int y = p.y - start.y;
model.translate(x, y);
view.repaint();
start = p;
private void updateTable()
String[] lengths = model.getLengths();
String[] squares = model.getSquares();
String[] angles = model.getAngles();
JTable table = view.getTable();
for(int j = 0; j < angles.length; j++)
table.setValueAt(lengths[j], 1, j + 1);
table.setValueAt(squares[j], 2, j + 1);
table.setValueAt(angles[j], 4, j + 1);
view.getCentroidLabel().setText("centroid
centroid location: " +
model.findCentroid());
Hey sorry mate.. ive got a nother problem.
I need to add loads of theorems to this tool. so i need a JMenu Bar called File with all the normal things. then another Menu called Theorems where i can have a list of JMenuItems with the theorem names --- Like when they click on Pythagoras Theorem it opens up all the triangle and the traingle data that u helped me with.
The thing is im using netbeans and in netbeans i can do it coz its there and all you got to do is put the components together.
Please Help
Thanks...
Sharan -
URGENT HELP REQUIRED _ Creating Labels for Triangle
Hi everyone... the code below is my application - Pythagoras Theorem.. or rather displaying it.. But i have not been able to get the Vertex of the triangle Labelled as A B C... I need to do that and change the Triangle Table data to A B C insted of Horizontal Vertical and Hypotenuise and as the triangle is stretched on screen A B And C keep moving as well ...
Besides i need to Show this in the tabel
- Values of A ^ 2 , B^2 and C ^2 as welll as a row showing A^2+B^2 = C^2
the code is as follows..
This is the main class called Geometry
import java.awt.*;
import java.awt.event.*;
import java.awt.geom.*;
import java.text.NumberFormat;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.table.DefaultTableCellRenderer;
import java.lang.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;
import java.awt.FileDialog;
import java.io.*;
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;
import javax.swing.JFrame;
public class Geometry {
CardLayout cards;
JPanel panel;
public Geometry() {
cards = new CardLayout();
panel = new JPanel(cards);
addCards();
JFrame f = new JFrame("Geometry");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setJMenuBar(getMenuBar());
f.getContentPane().add(panel);
f.setSize(500,500);
f.setLocation(0,0);
f.setVisible(true);
f.addMouseMotionListener(
new MouseMotionListener() { //anonymous inner class
//handle mouse drag event
public void mouseMoved(MouseEvent e) {
System.out.println("Mouse " + e.getX() +"," + e.getY());
public void mouseDragged(MouseEvent e) {
System.out.println("Draggg: x=" + e.getX() + "; y=" + e.getY());
// public void mouseMoved(MouseEvent me) {
// System.out.println("Moving: x=" + me.getX() + "; y=" + me.getY());
// panel.addMouseMotionListener(
// new MouseMotionListener() { //anonymous inner class
// //handle mouse drag event
// public void mouseDragged(MouseEvent me) {
// setTitle("Dragging: x=" + me.getX() + "; y=" + me.getY());
// public void mouseMoved(MouseEvent me) {
// setTitle("Moving: x=" + me.getX() + "; y=" + me.getY());
private void addCards() {
// card one
TriangleModel tri = new TriangleModel(175,100,175,250,325,250);
TriangleView view = new TriangleView(tri);
JPanel panelOne = new JPanel(new BorderLayout());
panelOne.add(view.getUIPanel(), "North");
panelOne.add(view);
panelOne.add(view.getTablePanel(), "South");
panelOne.setName("Pythagoras's Theorem");
panel.add("Pythagoras's Theorem", panelOne);
view.addMouseMotionListener(
new MouseMotionListener() { //anonymous inner class
//handle mouse drag event
public void mouseMoved(MouseEvent e) {
System.out.println("Mouse at " + e.getX() +"," + e.getY());
public void mouseDragged(MouseEvent e) {
System.out.println("Dragging: x=" + e.getX() + "; y=" + e.getY());
// card two
TestModel trin = new TestModel(175,100,175,250,325,250);
TestView viewn = new TestView(trin);
JPanel panelTwo = new JPanel(new BorderLayout());
panelTwo.add(viewn.getUIPanel(), "North");
// panelTwo.setBackground(Color.blue);
panelTwo.setName("Similar Triangles");
panelTwo.add(viewn);
panelTwo.add(viewn.getTablePanel(), "South");
viewn.addMouseMotionListener(
new MouseMotionListener() { //anonymous inner class
//handle mouse drag event
public void mouseMoved(MouseEvent e) {
System.out.println("Mouse at " + e.getX() +"," + e.getY());
public void mouseDragged(MouseEvent e) {
System.out.println("Dragging: x=" + e.getX() + "; y=" + e.getY());
panel.add("Similar Triangles", panelTwo);
JPanel panelThree = new JPanel();
panelThree.setBackground(Color.white);
panelThree.setName("Circle Theorem1");
panel.add("Circle Theorem1", panelThree);
private JMenuBar getMenuBar() {
JMenu File = new JMenu("File");
JSeparator separator1 = new JSeparator();
JMenuItem Open = new JMenuItem("Open");
// Open.addActionListener(new java.awt.event.ActionListener() {
// public void actionPerformed(java.awt.event.ActionEvent evt) {
// openActionPerformed(evt);
JMenuItem Save = new JMenuItem("Save");
JMenuItem Print = new JMenuItem("Print");
JMenuItem Exit = new JMenuItem("Exit");
Exit.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
ExitActionPerformed(evt);
JMenu theorem = new JMenu("Theorem");
ActionListener l = new ActionListener() {
public void actionPerformed(ActionEvent e) {
JMenuItem item = (JMenuItem)e.getSource();
String name = item.getActionCommand();
cards.show(panel, name);
Component[] c = panel.getComponents();
for(int j = 0; j < panel.getComponentCount(); j++) {
String name = c[j].getName();
JMenuItem item = new JMenuItem(name);
item.setActionCommand(name);
item.addActionListener(l);
theorem.add(item);
JMenuBar menuBar = new JMenuBar();
JMenuBar menuBar1 = new JMenuBar();
menuBar.add(File);
File.add(Open);
File.add(separator1);
File.add(Save);
File.add(Print);
File.add(Exit);
menuBar.add(theorem);
return menuBar;
// private void openActionPerformed(java.awt.event.ActionEvent evt) {
// FileDialog fileDialog = new FileDialog(this, "Open...", FileDialog.LOAD);
// fileDialog.show();
// if (fileDialog.getFile() == null)
// return;
// fileName = fileDialog.getDirectory() + File.separator + fileDialog.getFile();
// FileInputStream fis = null;
// String str = null;
// try {
// fis = new FileInputStream(fileName);
// int size = fis.available();
// byte[] bytes = new byte [size];
// fis.read(bytes);
// str = new String(bytes);
// } catch (IOException e) {
// } finally {
// try {
// fis.close();
// } catch (IOException e2) {
// if (str != null)
// textBox.setText(str);
private void ExitActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
System.exit(0);
public static void main(String[] args) {
new Geometry();
}import java.awt.*;
import java.awt.event.*;
import java.awt.geom.*;
import java.text.NumberFormat;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.table.DefaultTableCellRenderer;
public class Triangle
public Triangle()
TriangleModel tri = new TriangleModel(175,100,175,250,325,250);
TriangleView view = new TriangleView(tri);
JFrame f = new JFrame();
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.getContentPane().add(view.getUIPanel(), "North");
f.getContentPane().add(view);
f.getContentPane().add(view.getTablePanel(), "South");
f.setSize(500,500);
f.setLocation(200,200);
f.setVisible(true);
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.event.MouseEvent;
import javax.swing.JTable;
import javax.swing.event.MouseInputAdapter;
* TriangleControl.java
* Created on 06 February 2005, 01:19
* @author Rahindra Naidoo
public class TriangleControl extends MouseInputAdapter
TriangleView view;
TriangleModel model;
Point start;
boolean dragging, altering;
Rectangle lineLens; // used for line selection
public TriangleControl(TriangleView tv)
view = tv;
model = view.getModel();
dragging = altering = false;
lineLens = new Rectangle(0, 0, 6, 6);
public void mousePressed(MouseEvent e)
Point p = e.getPoint();
lineLens.setLocation(p.x - 3, p.y - 3);
// are we over a line
if(model.isLineSelected(lineLens))
start = p;
altering = true;
// or are we within the triangle
else if(model.contains(p))
start = p;
dragging = true;
public void mouseReleased(MouseEvent e)
altering = false;
dragging = false;
view.getCentroidLabel().setText("centroid location: " +
model.findCentroid());
view.repaint(); // for the construction lines
public void mouseDragged(MouseEvent e)
Point p = e.getPoint();
if(altering)
int x = p.x - start.x;
int y = p.y - start.y;
model.moveSide(x, y, p);
updateTable();
view.repaint();
start = p;
else if(dragging)
int x = p.x - start.x;
int y = p.y - start.y;
model.translate(x, y);
view.repaint();
start = p;
private void updateTable()
String[] lengths = model.getLengths();
String[] squares = model.getSquares();
String[] angles = model.getAngles();
JTable table = view.getTable();
for(int j = 0; j < angles.length; j++)
table.setValueAt(lengths[j], 1, j + 1);
table.setValueAt(squares[j], 2, j + 1);
table.setValueAt(angles[j], 3, j + 1);
view.getCentroidLabel().setText("centroid location: " +
model.findCentroid());
* TriangleModel.java
* Created on 06 February 2005, 01:18
import java.awt.*;
import java.awt.event.*;
import java.awt.geom.*;
import java.text.NumberFormat;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.table.DefaultTableCellRenderer;
* @author Rahindra Naidoo
public class TriangleModel // (x1, y1)
{ // |\
static final int SIDES = 3; // | \
private int cx, cy; // | \
Polygon triangle; // |_ _\ (x3, y3)
int selectedIndex; // (x2, y2)
NumberFormat nf;
Line2D[] medians;
Point2D centroid;
public TriangleModel(int x1, int y1, int x2, int y2, int x3, int y3)
int[] x = new int[] { x1, x2, x3 };
int[] y = new int[] { y1, y2, y3 };
triangle = new Polygon(x, y, SIDES);
nf = NumberFormat.getNumberInstance();
nf.setMaximumFractionDigits(1);
public boolean contains(Point p)
// Polygon.contains doesn't work well enough
return (new Area(triangle)).contains(p);
public boolean isLineSelected(Rectangle r)
Line2D line = new Line2D.Double();
for(int j = 0; j < SIDES; j++)
int[] x = triangle.xpoints;
int[] y = triangle.ypoints;
int x1 = x[j];
int y1 = y[j];
int x2 = x[(j + 1) % SIDES];
int y2 = y[(j + 1) % SIDES];
line.setLine(x1, y1, x2, y2);
if(line.intersects(r))
selectedIndex = j;
return true;
selectedIndex = -1;
return false;
* Only works for right triangle with right angle at (x2, y2)
public void moveSide(int dx, int dy, Point p)
int[] x = triangle.xpoints;
int[] y = triangle.ypoints;
switch(selectedIndex)
case 0:
x[0] += dx;
x[1] += dx;
break;
case 1:
y[1] += dy;
y[2] += dy;
break;
case 2:
double rise = y[2] - y[0];
double run = x[2] - x[0];
double slope = rise/run;
// rise / run == (y[2] - p.y) / (x[2] - p.x)
x[2] = p.x + (int)((y[2] - p.y) / slope);
// rise / run == (p.y - y[0]) / (p.x - x[0])
y[0] = p.y - (int)((p.x - x[0]) * slope);
public void translate(int dx, int dy)
triangle.translate(dx, dy);
public Polygon getTriangle()
return triangle;
public String findCentroid()
int[] x = triangle.xpoints;
int[] y = triangle.ypoints;
// construct the medians defined as the line from
// any vertex to the midpoint of the opposite line
medians = new Line2D[x.length];
for(int j = 0; j < x.length; j++)
int next = (j + 1) % x.length;
int last = (j + 2) % x.length;
Point2D vertex = new Point2D.Double(x[j], y[j]);
// get midpoint of line opposite vertex
double dx = ((double)x[last] - x[next])/2;
double dy = ((double)y[last] - y[next])/2;
Point2D oppLineCenter = new Point2D.Double(x[next] + dx,
y[next] + dy);
medians[j] = new Line2D.Double(vertex, oppLineCenter);
// centroid is located on any median 2/3 the way from the
// vertex (P1) to the midpoint (P2) on the opposite side
double[] lengths = getSideLengths();
double dx = (medians[0].getX2() - medians[0].getX1())*2/3;
double dy = (medians[0].getY2() - medians[0].getY1())*2/3;
double px = medians[0].getX1() + dx;
double py = medians[0].getY1() + dy;
//System.out.println("px = " + nf.format(px) +
// "\tpy = " + nf.format(py));
centroid = new Point2D.Double(px, py);
return "(" + nf.format(px) + ", " + nf.format(py) + ")";
public String[] getAngles()
double[] lengths = getSideLengths();
String[] vertices = new String[lengths.length];
for(int j = 0; j < lengths.length; j++)
int opp = (j + 1) % lengths.length;
int last = (j + 2) % lengths.length;
double top = lengths[j] * lengths[j] +
lengths[last] * lengths[last] -
lengths[opp] * lengths[opp];
double divisor = 2 * lengths[j] * lengths[last];
double vertex = Math.acos(top / divisor);
vertices[j] = nf.format(Math.toDegrees(vertex));
return vertices;
public String[] getLengths()
double[] lengths = getSideLengths();
String[] lengthStrs = new String[lengths.length];
for(int j = 0; j < lengthStrs.length; j++)
lengthStrs[j] = nf.format(lengths[j]);
return lengthStrs;
public String[] getSquares()
double[] lengths = getSideLengths();
String[] squareStrs = new String[lengths.length];
for(int j = 0; j < squareStrs.length; j++)
squareStrs[j] = nf.format(lengths[j] * lengths[j]);
return squareStrs;
private double[] getSideLengths()
int[] x = triangle.xpoints;
int[] y = triangle.ypoints;
double[] lengths = new double[SIDES];
for(int j = 0; j < SIDES; j++)
int next = (j + 1) % SIDES;
lengths[j] = Point.distance(x[j], y[j], x[next], y[next]);
return lengths;
import java.awt.*;
import java.awt.event.*;
import java.awt.geom.*;
import java.text.NumberFormat;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.table.DefaultTableCellRenderer;
* TriangleView.java
* Created on 06 February 2005, 01:21
public class TriangleView extends JPanel
private TriangleModel model;
private Polygon triangle;
private JTable table;
private JLabel centroidLabel;
private boolean showConstruction;
TriangleControl control;
public TriangleView(TriangleModel model)
this.model = model;
triangle = model.getTriangle();
showConstruction = false;
control = new TriangleControl(this);
addMouseListener(control);
addMouseMotionListener(control);
public void paintComponent(Graphics g)
super.paintComponent(g);
Graphics2D g2 = (Graphics2D)g;
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
g2.draw(triangle);
if(model.medians == null)
centroidLabel.setText("centroid location: " + model.findCentroid());
// draw medians and centroid point
if(showConstruction && !control.dragging)
g2.setPaint(Color.red);
for(int j = 0; j < 3; j++)
g2.draw(model.medians[j]);
g2.setPaint(Color.blue);
g2.fill(new Ellipse2D.Double(model.centroid.getX() - 2,
model.centroid.getY() - 2, 4, 4));
public TriangleModel getModel()
return model;
public JTable getTable()
return table;
public JLabel getCentroidLabel()
return centroidLabel;
public JPanel getUIPanel()
JCheckBox showCon = new JCheckBox("show construction");
showCon.addActionListener(new ActionListener()
public void actionPerformed(ActionEvent e)
boolean state = ((JCheckBox)e.getSource()).isSelected();
showConstruction = state;
repaint();
JPanel panel = new JPanel();
panel.add(showCon);
return panel;
public JPanel getTablePanel()
String[] headers = new String[] { "", "", "", "" };
// row and column data labels
String[] rowHeaders = {
"sides", "lengths", "squares", "angles", "degrees"
String[] sidesRow = { "vertical", "horizontal", "hypotenuse" };
String[] anglesRow = { "hyp to ver", "ver to hor", "hor to hyp" };
// collect data from model
String[] angles = model.getAngles();
String[] lengths = model.getLengths();
String[] squares = model.getSquares();
String[][] allData = { sidesRow, lengths, squares, anglesRow, angles };
int rows = 5;
int cols = 4;
Object[][] data = new Object[rows][cols];
for(int row = 0; row < rows; row++)
data[row][0] = rowHeaders[row];
for(int col = 1; col < cols; col++)
data[row][col] = allData[row][col - 1];
table = new JTable(data, headers)
public boolean isCellEditable(int row, int col)
return false;
DefaultTableCellRenderer renderer =
(DefaultTableCellRenderer)table.getDefaultRenderer(String.class);
renderer.setHorizontalAlignment(JLabel.CENTER);
centroidLabel = new JLabel("centroid location: ", JLabel.CENTER);
Dimension d = centroidLabel.getPreferredSize();
d.height = table.getRowHeight();
centroidLabel.setPreferredSize(d);
JPanel panel = new JPanel(new BorderLayout());
panel.setBorder(BorderFactory.createTitledBorder("triangle data"));
panel.add(table);
panel.add(centroidLabel, "South");
return panel;
}PLEASE HELP ---- Also does any one know how to draw a Triangle on a screen which can be controlled by a JSlider such that as and whenits incremented the triangle increase and vice versa... I need to prove Similarity in triangles using A Jslider that controls one triangle while the other triangle is Still on screenSharan,
The code given was part of the assignment and you are supposed to make the changes for your part right?
Please give details of what you have done so far and not expect us to do your assignment for you. We'll be glad to help answer questions and point to the right direction, but giving us the entire assignment and saying, very nicely I might add, "Please do it for me." Just seems to make a mockery of the hours, days, and years that many of us has spent earning our degrees and learning our skills.
Work on it and ask specific questions with examples of what you have done and you'll get a much better response. -
I need to know if anyone has coded the pythagoras theorem using areas of squares to prove the theorem.
I have got a triangle on screen with my angles and side lengths displayed in a jtable. I need to extend it to display the sides as squares.
such that the ares of the side and the base = area of the square from the hypotenuse..
PLEASE REPLY SOONsuch that the ares of the side and the base = area of
the square from the hypotenuse..You only have to display the square of the three sides. Pythagoras will personally take care of the theorem for you from his small study in Math Heaven. -
Help programming Pythagoras tree
Hello,
I want to write a program that draws a
Pythagoras
tree. The only programming language I know is C but I tried it
in that language and it was horrible. Someone recommended Flash
(AS3) to me so I am trying it in that now, but I only started
learning it yesterday.
Anyway, I got to the point where I can draw the leftturning
branch of the Pythagoras tree, but I don't know how to draw the
other branches. The number of "houseshapes" a square with a
rectangular triangle on top increases with every step according to
the formula 1 x 2^(n-1) (First step is n=1). I created a function
that draw this houseshape, called drawHouse() and it takes as its
arguments the co-ordinate of the lower left corner of the square
part of the house, the length of the side of the square part of the
house and the current rotation angle. Rotation angles are always
multiples of 45 for now, but I might try to expand it to other
values later, but for now I hardcoded a lot of stuff that assumes
the 'roof' of the house is a rectangular triangle.
What I am asking is: how do I store the 2 new x and y
co-ordinates that I can calculate after drawing the houseshape, for
drawing the next houseshape, and how do I store the angles? Do I
need 3 separate arrays for x, y and angle? And how do I then call
the houseshape function for every x and y co-ordinate and angle in
these arrays? Code below.
I would greatly appreciate any help.
Thanks in advance,
Maxcreate an array consisting of all newly added squares. you
need only include the [x,y,rotation,side length] of the newly added
squares where x,y are the coordinates of one corner of the square.
for each square in this array you'll create two new squares
(using the parents x,y,rotation,side length) and add those new
squares (x,y,rotation,side length) to the next generation of newly
added squares array (not the previous generations array).
ie, you'll create a new array containing 2**(n-1) array
elements with each order n. when you've completed looping through
the previous generation's array, you'll have completed creating the
next generation's squares and your next generation array will be
complete and be ready to be used to create the new order n+1
squares. -
Office Home and Student 2013 error message with yellow triangle
I have been using my word and excel they were working fine. Now there is a yellow triangle top right corner by my initials. I finally got it to show me only for a moment what it means. Error Message: did not realize I should have copied it down but
after error message it said to sign-out and sign back in. I have never had to sign in before the Office was installed in Dec 2013 by Best Buy. All they returned was the card they had used to download. When I tried to click on sign in it does nothing. The error
seems to have the word program very mixed up as it will preform some task but seems to lock me out of other normal things I usually do like spacing or changing font size just to name a few. I already checked for all updates on my computer per your sites suggestions.
How do I make the error message /yellow triangle go away and allow me to use the office home and student 2013 like it was working before. Please help I live alone, and near 60, live in the boondocks, and do not have any computer people within a 4 hour drive
round trip. Thank youNow there is a yellow triangle top right corner by my initials.
Hi,
As per the description, it looks like an issue with your microsoft account. Does the error message look like below?
ACCOUNT ERROR
Sorry, we can't get to your account right now.
To fix this, please sign in again.
Sign in
You mentioned that "a yellow triangle top right corner by my initials", you probably have already signed in with an acocunt. If you remember this account, I'd suggest you click
File>Account on the tab, click Sign out under
User Information, and then sign-in again. If you don't have this account, you probably need to contact the retailer for it.
If issue persists, please post back with the details of your system environment, then we will take a further look.
Regards,
Ethan Hua
TechNet Community Support
It's recommended to download and install
Configuration Analyzer Tool (OffCAT), which is developed by Microsoft Support teams. Once the tool is installed, you can run it at any time to scan for hundreds of known issues in Office
programs.
Maybe you are looking for
-
No.of.records in a file.
need your inputs on an issue. In an idoc to file scenario, I have a field "No.of.recs" in file structure. while I am sending this file, I need to populate this also. How can I do it?
-
Hi, Can anyone tell me if and how I can index pdf verion 1.4 files in a Oracle 9.2 database? Does 10g support the new pdf version? Thanx for your response. Greetings, Mark
-
Is the Remote Object always a singleton?
Hi, Using .Net Remoting we can export a Remote Objects in three different ways: 1. Singleton: Same instance of a Server-side object is used by all the clients for all the requests. 2. SingleCall: Whenever a new call is received, a new instance of the
-
Dummy profit center to other profit centers
how to transfer entry dummy profit center to other profit centers please tell me.
-
Bonjour je n ai plus de video sur youtube avec mon g5
bonjour je possede un powere mac avec version 10,5,8 et depuis peu je n arrive plus a lire les videos sur youtube probleme avec flash player j ai beau reinstaller flash rien ne marche merci pour l aide