• Global community
    • Language:
      • Deutsch
      • English
      • Español
      • Français
      • Português
  • 日本語コミュニティ
    Dedicated community for Japanese speakers
  • 한국 커뮤니티
    Dedicated community for Korean speakers
Exit
0

Find a ratio.... hum?

Participant ,
Nov 28, 2009 Nov 28, 2009

Copy link to clipboard

Copied

I'm writing a neat little image editing tool for image uploadds, but I need to constrain the images to a 4:3 ratio....  I can get the images, dimeansions all that etc no problems, but, with CFMX, how do I determine the ratio between 2 numbers??  looping trough division statements looking for integers and then comapring to see where the lowest is found seems REALLY REALLY messy...

is there a better way?

-thanks

-sean

TOPICS
Advanced techniques

Views

959

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines

correct answers 1 Correct answer

Advocate , Nov 28, 2009 Nov 28, 2009

if (height / width == 3 / 4)

accept;

else

reject;

Votes

Translate

Translate
LEGEND ,
Nov 28, 2009 Nov 28, 2009

Copy link to clipboard

Copied

Your question is not clear.  What division statements do you have to loop through?  Why do you have to look for integers?

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Participant ,
Nov 28, 2009 Nov 28, 2009

Copy link to clipboard

Copied

to find a ratio you need to find the highest common factor [?] that both dimensions [height & width] are divisible by i.e. 640x480 highest common factor  is 160 divide them both is 4:3 ....  [I hope I am using the math terms right]

-sean

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
LEGEND ,
Nov 28, 2009 Nov 28, 2009

Copy link to clipboard

Copied

How are you going to use this number once you have it?


Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Participant ,
Nov 28, 2009 Nov 28, 2009

Copy link to clipboard

Copied

basically all I need to do is determine if the uploaded image dimensions are in a 4:3 ratio, [640x480, 800x600, etc.] so I can resize it without distortion or reject the image.

-sean

UPDATE:

hmmm, if I divide the first dimension [width] by 4 then multiply the result by 3 that result should equal the provided image's height to equal a 4:3 ratio.

Think I just answered my own [3rd grade math] question.

-sean

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Advocate ,
Nov 28, 2009 Nov 28, 2009

Copy link to clipboard

Copied

if (height / width == 3 / 4)

accept;

else

reject;

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Participant ,
Nov 29, 2009 Nov 29, 2009

Copy link to clipboard

Copied

I think jochemd's answer was closest to the mark I am looking for here....

height/width = 0.75 and I want to give a litlle bit of leeway here say up to 1% in any dimension so....

ratio = (height / width);

if ( (ratio lte 0.76) and (ratio gte 0.74)) {

     do;

}else{

     or do not;

     //there is no try.

}

that gives me approximately 10 pixel leeway if someone were to upload a 1024x768 image.[i.e. they could upload a 1034x770 image and it would still pass muster.

-thanks guys

-sean

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Expert ,
Nov 29, 2009 Nov 29, 2009

Copy link to clipboard

Copied

That's actually what I meant by "Floating-point arithmetic is, in general, not exact". Your earlier attempt and indeed Jochemd's didn't take account of that.

Now to something else. A deviation of 0.76 or 0.74 from 3/4 isn't 1%. It is 0.01 of 0.75, which is approximately 1.33%.

If you wish to have a 1% tolerance from 3/4, then you have to do something like

ratio = height/width;

if (abs(4*ratio/3 -1) LT 0.01) {
     do;
}else{
     or do not;
     //there is no try.
}

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Participant ,
Nov 29, 2009 Nov 29, 2009

Copy link to clipboard

Copied

Like I said "about" - "up to" not exactly 1% cause users are not going to get it perfect every time

though, not sure about your 1.33% comment, by dividing height/width, we are finding what % height is of width,  so by saying "is it 75%" then giving it a leeway of "1" either way, is exactly 1%..... unless I am missing somehting.

either way - no big deal, it's supposed to be somewhat fuzzy.

-sean

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Expert ,
Dec 03, 2009 Dec 03, 2009

Copy link to clipboard

Copied

LATEST
@Sean69
Like I said "about" - "up to"

No misunderstanding there. That's what I meant, too.

not sure about your 1.33% comment, by dividing height/width, we
are finding what % height is of width,  so by saying "is it 75%" then
giving it a leeway of "1" either way, is exactly 1%..... unless I am
missing somehting.

What you're measuring isn't height or width, but ratio. As the variable under consideration is the aspect ratio 3:4, a leeway of 1 either way is therefore 1 out of 75. That is around 1.33%.

When you say 1%, it implies 1% of 0.75, which is 0.0075. In other words, the condition for a value of the aspect ratio to be within 1% of 0.75 is: abs(ratio - 0.75)/0.75 <= 0.01.

Aspect Ratio is a dimensionless quantity. That is, the unit of length(inches, metres, centimetres) in the height will cancel out that in the width. This imples that a deviation from the ratio remains the same as you scale up, say, from 800x600 to 1024x768. Therefore, your solution, abs(ratio - 0.75) <= 0.01, is as good as any.

either way - no big deal

I agree. Main thing is, your problem has been solved.

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Expert ,
Nov 29, 2009 Nov 29, 2009

Copy link to clipboard

Copied

@Sean69

if I divide the first dimension [width] by 4 then multiply the result by 3 that result should equal the provided image's height to equal a 4:3 ratio.

@Jochemd

if (height / width == 3 / 4)
  accept;
else
  reject;

Not quite. When you divide by integers, you're into floating-point arithmetic.

Floating-point arithmetic is, in general, not exact. To avoid truncation errors, keep the logic within the set of integers, something like

if (4*height EQ 3*width)
  ...
else
...

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Resources
Documentation